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 == 1
和 size() == 1
,因此循环退出而不处理第二个元素。
【讨论】:
【参考方案3】:因为您在 for 循环中更改了向量的大小(在 Pop_back()
中),它用于循环的结束条件。也许您应该在 for 循环之前存储大小。
int v1_size = v1.size();
for (int j = 0; j < size; j++)
【讨论】:
以上是关于for 循环只打印一半的值(使用向量)的主要内容,如果未能解决你的问题,请参考以下文章