Foreach在特征矩阵上循环?

Dav*_*fau 8 foreach eigen c++11

是否可以使用带有特征矩阵的C++ 11的foreach语法?例如,如果我想计算矩阵的总和(我知道有一个内置函数,我只想要一个简单的例子)我想做类似的事情

Matrix2d a;
a << 1, 2,
     3, 4;
double sum = 0.0;
for(double d : a) {
  sum += d;
}
Run Code Online (Sandbox Code Playgroud)

然而,Eigen似乎并不允许它.有没有更自然的方法来对特征矩阵的元素进行foreach循环?

mty*_*mty 0

可以使用成员函数 获得指向矩阵数据数组的指针.data()。

数据数组的大小也可以使用成员函数获得.size()。

使用这两个,我们现在拥有指向数组的第一个元素和末尾的指针,如a.data()和a.data()+a.size()。

另外,我们知道 anstd::vector可以使用迭代器(或者在我们的例子中是数组指针)来初始化。

因此,我们可以获得用 包裹矩阵元素的双精度向量std::vector<double>(a.data(), a.data()+a.size())。

该向量可以与代码片段中包含的基于范围的 for 循环语法一起使用,如下所示:

  Matrix2d a;
  a << 1, 2,
       3, 4;
  double sum = 0.0;
  for(double d : std::vector<double>(a.data(), a.data()+a.size())) {
      sum += d;
  }
Run Code Online (Sandbox Code Playgroud)

  • 这将执行矩阵的副本,而不是迭代矩阵本身,这可能不是提问者想要做的事情。 (3认同)