[英]missing rows with cout for 2d vector in c++
我很瘋狂,無法解釋這里發生的事情。
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int i = 0, j = 0, m = 3, n = 3;
vector<vector<int> > vvi(3, vector<int>(3, 1));
// why the following code outputs only single row,
// i.e.,"111" from vvi[0]? what about vvi[1], vvi[2]?
for(; i < m; ++i) {
for(; j< n; ++j) {
cout << vvi[i][j];
}
}
// any difference from the code below?
// for(int i=0; i < m; ++i) {
// for(int j= 0; j< n; ++j) {
// cout << vvi[i][j];
// }
// }
}
在外循環的第一次迭代中,計數器變量j
從0
遞增到n
,但是由於它從未被重置為0
所以它保持在n
,因此內循環條件j < n
對於外循環的所有后續迭代都是false 。 因此, cout
將永遠不會再次執行。
在您注釋掉的代碼中,外循環的每次迭代將j
重置(重新初始化)為0
,因此它將打印所有行。
在第一個中,當vvi[0]
完成時, j
為3
。
轉到vvi[1]
j
仍為3
因此j < n
為假。
在第二個中,當外循環開始第二個迭代時, j
將再次設置為0
。
此代碼與第二個代碼等效(結果中):
for(; i < m; ++i) {
for(j = 0; j< n; ++j) {
cout << vvi[i][j];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.