我正在学习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语句中一次,在循环底部一次)。

这将导致迭代器跳过其他所有元素。

列表的大小保持不变:10010,紧随其后是010是列表的大小,而0是列表的第一个元素。在打印出大小后打印空格或换行符,您将自己看到。

09-15 11:41