遍历矩阵的方法

Ways to traverse a matrix

本文关键字:方法 遍历      更新时间:2023-10-16
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++){

}
}

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

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

然而,假设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];          
}
}