2014-09-25 52 views
3

我只是想從頭到尾遍歷矩陣觸及每個元素。但是,我看到有沒有一個迭代器升壓矩陣,而有兩個迭代器,我一直無法弄清楚如何使他們的工作,這樣就可以遍歷整個矩陣使用迭代器遍歷boost :: ublas矩陣

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打印矩陣的第一行,而使用itr2打印矩陣的第一列。可以做些什麼來改爲訪問所有行和列?

回答

7

遍歷矩陣的iterator2應的iterator1中獲取,就像這樣:

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 
... 
+0

我看看,謝謝 – 2014-09-25 18:10:22