for 循环只打印一半的值(使用向量)

Posted

技术标签:

【中文标题】for 循环只打印一半的值(使用向量)【英文标题】:for loop only printing half the values (working with vectors) 【发布时间】:2015-07-01 02:14:59 【问题描述】:

main 中假定 pop_back 值的 for 循环仅打印数组中值的一半。但是,当我编写 (i

MyVector.h

template<class T>
T MyVector<T>::Pop_back( )
   return elements_ptr[--vectorSize];
   

main.cpp

int main() 

    MyVector<int> v1;
    int user = 500;

    for(int i= 1; i <= user; i++)
         v1.Push_back(i);
    
    cout << v1.size() << endl; // outputs 500

    for (int j = 0; j < v1.size(); j++)
         cout << v1.Pop_back() << " ";
         if( j % 20 ==0 )
         cout << endl;
         
   

   return 0;
 

【问题讨论】:

【参考方案1】:

问题出在这里:

for (int j = 0; j < v1.size(); j++)  … 

随着您继续从向量中弹出元素,其报告的size() 越来越小,而j 则在增长。弹出一半元素后,循环条件变为假。

解决方案是使用任一

while (v1.size())  … 

const int N = v1.size();
for (int i = 0; i < N; ++i)  … 

正如您已经发现的那样。我更喜欢前者。

【讨论】:

【参考方案2】:

每调用一次pop_back()size() 返回的值就会减 1。

因此,如果您从向量中的两个元素开始,并在第一次迭代时调用 pop_back(),那么在第二次迭代中,您将得到 j == 1size() == 1,因此循环退出而不处理第二个元素。

【讨论】:

【参考方案3】:

因为您在 for 循环中更改了向量的大小(在 Pop_back() 中),它用于循环的结束条件。也许您应该在 for 循环之前存储大小。

int v1_size = v1.size();
for (int j = 0; j < size; j++) 

【讨论】:

以上是关于for 循环只打印一半的值(使用向量)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用 for 循环输出向量中的所有对象

在for循环C ++之外访问向量[关闭]

为啥需要两个范围 for 循环来更改 C++ 中向量的这些元素?

C++:问题向量 STL

For 循环增量器不能作为字符串向量的索引

For循环迭代不断增长的向量