c++ 中二维向量的 cout 缺失行
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
为假。因此 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];
}
}
我疯了,无法解释这里发生的事情。
#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
为假。因此 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];
}
}