c++ - 使用迭代器遍历 boost::ublas 矩阵

标签 c++ boost matrix iterator ublas

我只是想从头到尾遍历每个元素的矩阵。但是,我看到 boost 矩阵没有一个迭代器,而是有两个迭代器,我一直无法弄清楚如何使它们工作,以便您可以遍历整个矩阵

    typedef boost::numeric::ublas::matrix<float> matrix;

    matrix m1(3, 7);

    for (auto i = 0; i < m1.size1(); i++)
    {
        for (auto j = 0; j < m1.size2(); j++)
        {
            m1(i, j) = i + 1 + 0.1*j;
        }
    }

    for (auto itr1 = m1.begin1(); itr1!= m1.end1(); ++itr1)
    { 
        for (auto itr2 = m1.begin2(); itr2 != m1.end2(); itr2++)
        {
            //std::cout << *itr2  << " ";
            //std::cout << *itr1  << " ";
        }
    }

我的这段代码,使用 itr1 仅打印矩阵的第 1 行,使用 itr2 仅打印矩阵的第 1 列。可以做些什么来访问所有行和列?

最佳答案

要遍历矩阵,应该从 iterator1 中获取 iterator2,如下所示:

for(auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++)

完整代码:

#include <stdlib.h>
#include <boost/numeric/ublas/matrix.hpp>

using namespace boost::numeric::ublas;
using namespace std;

int main(int argc, char* argv[]) {

  typedef boost::numeric::ublas::matrix<float> matrix;

  matrix m1(3, 7);
  for (auto i = 0; i < m1.size1(); i++) {
    for (auto j = 0; j < m1.size2(); j++) {
      m1(i, j) = i + 1 + 0.1*j;
    }
  }

  for(matrix::iterator1 it1 = m1.begin1(); it1 != m1.end1(); ++it1) {
    for(matrix::iterator2 it2 = it1.begin(); it2 !=it1.end(); ++it2) {
      std::cout << "(" << it2.index1() << "," << it2.index2() << ") = " << *it2 << endl;
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

输出:

(0,0) = 1
(0,1) = 1.1
(0,2) = 1.2
(0,3) = 1.3
...

关于c++ - 使用迭代器遍历 boost::ublas 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044603/

相关文章:

c++ - 如果两种语言遵循 IEEE 754,两种语言的计算会得出相同的答案吗?

c++ - 如何在 Windows Netbeans 中设置 gtest?

python - 用 boost python 暴露多态性

c++ - 如何测量共享内存中 boost 进程间 vector 的大小?

java - 我可以在Java中自定义矩阵的索引吗?

java - 是否可以创建一个类方法,该方法将根据给定条件返回一个数组或什么都不返回?

python - 获取排序矩阵的索引

c++ - 用模板函数重载模板类

c++ - 无法使用mingw32-g++链接Boost

c++ - 如何在 C++ 中为二维数组重载 operator[]