我正在学习C ++中的容器,并尝试在迭代器的帮助下插入和打印列表的元素。我得到的输出不同于我的期望。
#include<iostream>
#include<list>
#include<vector>
#include<deque>
#include<string>
using namespace std;
int main()
{
list<int> ilist(10);
cout<<ilist.size()<<endl;
list<int>::iterator litr = ilist.begin();
int i =0;
for(litr = ilist.begin();litr != ilist.end();litr++,i++)
{
cout<<"i:"<<i<<" ";
//ilist.push_back(i);
*litr=i;
litr++;
}
litr = ilist.begin();
cout<<endl;
cout<<ilist.size();
while(litr != ilist.end())
{
i=*litr;
cout<<i<<endl;
litr++;
}
return 0;
}
输出:
10
i:0 i:1 i:2 i:3 i:4
100
0
1个
0
2
0
3
0
4
0
为什么在插入元素后更改了大小,以及为什么未正确插入元素?
提前致谢。
最佳答案
在第一个循环中,每次迭代将迭代器增加两次(在for
语句中一次,在循环底部一次)。
这将导致迭代器跳过其他所有元素。
列表的大小保持不变:100
是10
,紧随其后是0
。 10
是列表的大小,而0
是列表的第一个元素。在打印出大小后打印空格或换行符,您将自己看到。