如何遍历矩阵

时间:2014-03-03 02:33:22

标签: c++ vector iterator

    for (row = vec.begin(); row != vec.end(); row++) {

        for (col = row->begin(); col != row->end(); col++) {


        }
}

所以我知道第一组循环工作正常,但我不确定这个循环。

    for (col = row->begin(); col != row->end(); col++){

         for (row = vec.begin(); row != vec.end(); row++){


        }
}

我很确定它没有,所以如果是这样的话,你会怎么做类似的事情,即从列到列遍历矩阵,而不是从行到列。

1 个答案:

答案 0 :(得分:1)

如果你想按列遍历一个矩阵,那么将矩阵按列主顺序而不是行主顺序存储会更有意义,这样你的第一个循环就会实际遍历列而不是行。

但是,假设vect实际上引用了std::vector<std::vector<double>>之类的内容,并且每行中的列数相同,则应该能够直接通过索引进行遍历。我只发布这个,因为你没有说你只是在考虑使用迭代器的解决方案。

 for (int i = 0; i < vec[0].size(); i++){
     for (int j = 0; j < vec.size(); j++){
        auto data = vec[j][i];          
     }
}

如果行的大小不均匀,一种可能的解决方案是预先提取任意行中的最大列数。

size_t max_columns = 0;
for (int j = 0; j < vec.size(); j++)
     max_columns = max(max_columns, vec[j].size());


for (int i = 0; i < max_columns; i++){
     for (int j = 0; j < vec.size(); j++){
        if (i >= vec[j].size()) continue;
        auto data = vec[j][i];          
     }
}