Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作矩阵的深度副本? 使用本征C++库,如何制作矩阵的深层拷贝?例如,如果我有: Eigen::Matrix4f A; Eigen::Matrix4f B = A;_C++_Matrix_Eigen - Fatal编程技术网

如何制作矩阵的深度副本? 使用本征C++库,如何制作矩阵的深层拷贝?例如,如果我有: Eigen::Matrix4f A; Eigen::Matrix4f B = A;

如何制作矩阵的深度副本? 使用本征C++库,如何制作矩阵的深层拷贝?例如,如果我有: Eigen::Matrix4f A; Eigen::Matrix4f B = A;,c++,matrix,eigen,C++,Matrix,Eigen,然后我修改A,它也会修改B。但是我希望B是原始a元素的副本。如何获取此信息?在初始化矩阵时不要使用auto,因为这会使A=B成为浅拷贝自动还将导致其他意外结果。改用MatrixXd #include <iostream> #include "Eigen/Dense" using namespace Eigen; typedef Matrix<double,Dynamic,Dynamic,RowMajor> MyMatrix; int main() { dou

然后我修改
A
,它也会修改
B
。但是我希望
B
是原始
a
元素的副本。如何获取此信息?

在初始化矩阵时不要使用
auto
,因为这会使
A=B
成为浅拷贝
自动
还将导致其他意外结果
。改用
MatrixXd

#include <iostream>
#include "Eigen/Dense"

using namespace Eigen;

typedef Matrix<double,Dynamic,Dynamic,RowMajor> MyMatrix;

int main()
{
    double a[] = {1,2,3,4};
    auto M = Map<MyMatrix>(a, 2, 2);
    auto G = M;
    MatrixXd g = M;
    G(0,0) = 0;
    std::cout << M << "\n" << std::endl;
    std::cout << G << "\n" << std::endl;
    std::cout << g << "\n" << std::endl;
}

因此,您想暗示修改
A
将修改
B
,但修改
B
不应修改
A
?您能写一个简单的示例吗。我认为它不应该像你说的那样,它会复制一个副本,而制作一个引用矩阵似乎是非常荒谬的。你确定你没有在更改a后重新定义B=a的值吗?这必须起作用:复制构造复制内存。请把你实验的完整代码贴出来。
0 2
3 4

0 2
3 4

1 2
3 4