EigenはC++のよく知られた行列ライブラリです。私は、単純に行列の最後にアイテムをプッシュする組み込み関数を見つけるのが面倒です。Eigen MatrixXdはC++でプッシュバック
Eigen::MatrixXd matrix(10, 3);
long int count = 0;
long int topCount = 10;
for (int i = 0; i < listLength; ++i) {
matrix(count, 0) = list.x;
matrix(count, 1) = list.y;
matrix(count, 2) = list.z;
count++;
if (count == topCount) {
topCount *= 2;
matrix.conservativeResize(topCount, 3);
}
}
matrix.conservativeResize(count, 3);
そして、これは(構文の一部が出てかもしれ)動作します。現在、私はそれはこのように行うことができることを知っています。しかし、それはかなり単純なことのために巻き込まれました。すでに組み込まれている機能はありますか?
Eigenでは、コンパイル時にMaxRows MaxColsを定義できるため、実行時間まで正確なサイズがわからなくても、メモリ要件は制限されたままです(resize/push_back操作にメモリ割り当ては不要です)。 size
gnzlbg
"さらに、線形代数行列では、ベクトルのサイズはほぼ常に一定であり、事前にわかっています。ほとんどの反復アルゴリズムでは、収束基準が満たされるまで何回の反復が必要であるかはわかりません。 – Lindon
上記の注意点をモジュロにして、私が本当に必要な場合は、大きな行列を割り当てて、行列の使用部分を表すブロックを公開します。プッシュするには、ストレージマトリックスの値を入力し、使用済みの新しい部分をカバーする新しい拡張ブロックを作成します。ストレージマトリクスのサイズを使い切ったら、各ディメンションを2倍にして再割り当てします。これは、std :: vectorと同じく、償却された定数です。一度これをカスタムクラスとしてラップすることができます。 (私は行列と比べてブロックの特定の制限を知らないので、それらを数回使っただけです)。 – THK