Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++ C++;本征移动阵列xd到矩阵xd_C++_C++11_Eigen - Fatal编程技术网

C++ C++;本征移动阵列xd到矩阵xd

C++ C++;本征移动阵列xd到矩阵xd,c++,c++11,eigen,C++,C++11,Eigen,我想将类型为Eigen::ArrayXXd的数组移动(或交换)到Eigen::MatrixXd。 为了达到这个目的,我试着 #include <iostream> #include <Eigen/Dense> using namespace std; int main(int , char** ) { Eigen::ArrayXXd array(100,100); auto mat2 = std::move(mat.matrix()); cout

我想将类型为Eigen::ArrayXXd的数组移动(或交换)到Eigen::MatrixXd。 为了达到这个目的,我试着

#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main(int , char** ) {
    Eigen::ArrayXXd array(100,100);
    auto mat2 = std::move(mat.matrix());
    cout << array.size() << endl;
    cout << mat.size() << endl;
}
测试的Eigen I版本为3.2.0 beta1,使用gcc 4.8.0。从实验来看,矩阵和数组的移动语义似乎还没有实现。是这样吗

有什么方法可以安全移动(无需复制)

您不能强制移动某个对象。如果您尝试执行的操作没有移动构造函数/赋值运算符(并且我在其文档中没有看到Eigen具有移动感知的证据),那么您无法移动它们


移动不是魔法;它需要某个类型的作者的明确支持。

谢谢,Eigen现在似乎不支持。那么,有没有一种方法可以在不复制的情况下安全地交换它们?实际上,我的矩阵太大了,我的内存太少了。@Sungmin:看看文档。如果有一个函数可以进行交换,它会这么说。据我从文档中了解,有一个从Arrayxd到MatrixXd的转换函数。两个不同矩阵之间的交换也是如此。所以我猜有一种方法可以交换Arrayxd和MatrixXd。顺便问一下,我怎么回答?有时我在写“@”时会看到一些ID的提示。现在并没有任何建议出现。@Sungmin当你们回复帖子的自动回复时,它是隐含的
    Eigen::MatrixXd mat;
    mat.swap(array.matrix());   (runtime error assert failure)
//  swap(array.matrix(), mat);  (compile error)