c++ - 迭代器在 C++ 中的工作原理

标签 c++ iterator

我正在学习 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 我:0 我:1 我:2 我:3 我:4 100 0 1个 0 2个 0 3个 0 4个 0

为什么插入元素后大小改变了,为什么元素没有正确插入?

提前致谢。

最佳答案

在第一个循环中,每次迭代都会使迭代器递增两次(一次在 for 语句中,一次在循环底部)。

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

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

关于c++ - 迭代器在 C++ 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093777/

相关文章:

c++ - Connman 代理 RequestInput 循环

c++ - SDL FrameRate 上限实现

python - 'any()' 调用后不保留迭代器值

c++ - 将 map 数据的 vector 复制到 vector 图中

c++ - 为什么要重置全局定义的静态变量?

c++ - 列出所有打开 AL 的设备不起作用

c++ - C++ 的默认复制构造函数本质上是不安全的吗?迭代器从根本上来说也是不安全的吗?

c++ - 运行时错误 : RunTime Error : map/set iterators incompatible

java - ArrayList 迭代器抛出 ConcurrentModificationException

c++ - Malloc 和自由多指针