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++){
}
}
我很确定它没有,所以如果是这样的话,你会怎么做类似的事情,即从列到列遍历矩阵,而不是从行到列。
答案 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];
}
}