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);
,这将工作(一些语法可能是出于)。但它的一个简单的事情相当复杂。有没有内置函数?
好征,您可以在编译时定义MAXROWS MaxCols,所以即使你不知道确切的尺寸,直到运行时的内存需求保持有界(无内存分配将需要调整大小/的push_back操作)。如果您可以push_back元素,行和列的长度
gnzlbg
“此外,在线性代数矩阵中,矢量大小几乎总是恒定的并且事先已知。”在大多数迭代算法中,您不知道需要多少次迭代才能满足收敛条件。 – Lindon
上面的注意事项,如果我真的需要这个,我会分配一个大的矩阵,然后公开一个代表矩阵使用部分的块。推动,你填写存储矩阵的值,并创建一个新的扩展块,涵盖新的使用部分。当你耗尽存储矩阵的大小时,重新分配它使每个维度加倍。这是摊销常数,与std :: vector相同。一次可以将其作为自定义类来包装。 (我不知道与矩阵相比,块的特定限制,我只用了几次。) – THK