2011-03-17 42 views
0
int main() 
{ 
vector<int> v(5); 
v[0]=0; v[1]=1; v[2]=2; v[3]=3; v[4]=4; 

for (int i=0; i<v.size(); i++) 
    v.pop_back(); 
for (int i=0; i<v.size(); i++) 
    cout<<v[i]; 
cout<<"\n"; 

return 0; 
} 

我很困惑,为什么输出是“01”。我会认为输出为“0”帮助搞清楚为什么这个输出是“01”

+1

哎哟哎哟.....请让它不能生产代码 – Anycorn 2011-03-17 05:06:30

回答

3

跟踪通过第一for循环的每次迭代:

i v.size() v (before pop_back) 
0 5   0,1,2,3,4 
1 4   0,1,2,3 
2 3   0,1,2 
3 2   0, 1 

和环路停止在那里(未弹出当我== 3)因为3 < 2是假的。所以循环后的v的最后内容是[0,1]。

3

如果v.size()在每个循环中计算一次,那么当您将项目从您的向量中弹出时,循环限制将降低。它必须在退出循环之前弹出最后3个关闭。

+0

也,闻起来像家庭作业。 – geofftnz 2011-03-17 05:06:12

0

如所提到的,第二循环符合在第三迭代中的停止条件,因为我val为3和矢量大小是2

+0

这实在是一个评论,而不是问题的答案。请使用“添加评论”为作者留下反馈。 – ThePower 2012-08-15 15:31:02

+0

在1年零5个月后,你提到了我。 Ridiculos – 2012-08-17 06:20:16

+0

似乎是一个重新发生的问题,你有。 – ThePower 2012-08-17 07:57:10

相关问题