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

for loop only printing half the values (working with vectors)

本文关键字:向量 循环 打印 一半 for      更新时间:2023-10-16

假设pop_back值的main中的for循环只打印数组中一半的值。但是,当我写入(i<=user)时,它会打印所有值。

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;
 }

问题就在这里:

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

当你继续从向量中弹出元素时,它报告的size()越来越小,而j却在增长。弹出一半元素后,循环条件将变为false。

解决方案是使用

while (v1.size()) { … }

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

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

每次调用pop_back()时,size()返回的值都会减少1。

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

因为您正在更改for循环内向量的大小(以Pop_back()为单位),该向量用于循环的结束条件。也许你应该在for循环之前存储尺寸。

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