for循环中的c ++声明变量

时间:2012-01-02 20:17:33

标签: c++

问题是关于循环内的变量。它是如何工作的? 类似的问题:
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()?

6 个答案:

答案 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;
每次在外循环中都会执行

,因此每次迭代只能获得一个元素