问题是关于循环内的变量。它是如何工作的?
类似的问题:
one
two
代码:
for ( i = 0 ; i < 3 ; i++ ) {
vector<int> vint;
vint.push_back(i);
cout << "vecor size is: " << vint.size() << endl;
for ( j = 0 ; j < vint.size() ; j++ ) {
cout << "vint[" << j << "] = " << vint[j] << endl;
}
}
上面的代码给出了下一个输出:
vecor size is: 1
vint[0] = 0
vecor size is: 1
vint[0] = 1
vecor size is: 1
vint[0] = 2
看起来在每个迭代方法结束时调用sdt :: vector :: erase或者某种方式vint再次为空。它是如何工作的,你是如何弄明白的?谢谢!
更新:
如果我想在每次迭代中使用不同的向量,那么更好的是:
在循环中声明vint
或者在循环之前声明它并在循环结束时使用clear()?
答案 0 :(得分:2)
您已在循环中声明vint
,因此其生命周期恰好是一次迭代。在每次迭代中,构造一个新的vector
,并在每次迭代结束时调用它的析构函数。
尝试将vint
的声明移到循环之外。
答案 1 :(得分:2)
在每次迭代中构造和销毁for循环语句中的变量。在您的特定情况下,这将涉及每次迭代的内存分配和释放。如果每次迭代都需要不同的向量,那么最好在循环之前(或在循环初始化中)声明它并在循环结束时(或在循环的前进中)clear()
。
答案 2 :(得分:0)
vint
被清除(整个事物,而不仅仅是项目)。
答案 3 :(得分:0)
嗯,每次在内循环开始时重新声明vint
。因此奇怪的输出。
请改用:
vector<int> vint;
for ( i = 0 ; i < 3 ; i++ ) {
vint.push_back(i);
cout << "vecor size is: " << vint.size() << endl;
for ( j = 0 ; j < vint.size() ; j++ ) {
cout << "vint[" << j << "] = " << vint[j] << endl;
}
}
答案 4 :(得分:0)
每当外循环迭代时,它会初始化vint,因为它的大小保持不变。
for ( i = 0 ; i < 3 ; i++ ) {
vector<int> vint; // vint Initialization
vint.push_back(i);
cout << "vecor size is: " << vint.size() << endl;
for ( j = 0 ; j < vint.size() ; j++ ) {
cout << "vint[" << j << "] = " << vint[j] << endl;
}
}
如果你这样写,那么它将在内循环中包含更多值
vector<int> vint; // vint Initialization
for ( i = 0 ; i < 3 ; i++ ) {
vint.push_back(i);
cout << "vecor size is: " << vint.size() << endl;
for ( j = 0 ; j < vint.size() ; j++ ) {
cout << "vint[" << j << "] = " << vint[j] << endl;
}
}
答案 5 :(得分:0)
vector<int> vint;
每次在外循环中都会执行,因此每次迭代只能获得一个元素