我有一个std::vector<double *> x
,其中每个元素都指向C风格的double数组。double数组的值随着程序的每次迭代而变化。我想在Eigen::ArrayXd x_old
中创建一个副本,这样我就可以计算新值的差值。我尝试使用Eigen::Map
,但它只复制了一个数组,而且它们仍然是内存连接的。所以从技术上讲,它不是一个副本。现在我试图memcpy
它,但我只得到了第一个数组。谢谢你的帮助
std::vector<double *> x;
x.push_back( new double[2]{1, 2} );
x.push_back( new double[2]{3, 4} );
Eigen::ArrayXd x_old(4);
memcpy(x_old.data(), *x.data(), 4*sizeof(double));
1条答案
按热度按时间monwx1rj1#
memcpy(x_old.data(), *x.data(), 4*sizeof(double));
的问题在于,由于您手动为vector
的每个元素分配了内存,因此下面的数据不再是连续的,即2
后面没有3
。(指针的位置是连续的,但它们指向的数组不是)因此,当你把它们放入
x_old
时,你不能把它们作为一个连续的内存,而是需要把vector
的每个元素分别相加:或者编写一个for循环:
旁注,
*x.data()
等于说x[0]
。