gpt4 book ai didi

c++ - 当通知的迭代器参数初始化为空列表的开头时,list::insert行为是什么?

转载 作者:行者123 更新时间:2023-12-02 10:02:31 26 4
gpt4 key购买 nike

假设您有一个C++空列表:

list<int> l;

然后从头开始插入三个新元素:
auto it = l.begin();
l.insert(it,10);
l.insert(it,20);
l.insert(it,30);

尝试从头到尾打印列表元素时:
for(int i: l){
cout << i << ' ';
}

获得的结果是: 10 20 30

但是假设 insert函数在迭代器指向的元素之前插入 元素,因此获得的结果应该是:30 20 10

为什么会这样?

最佳答案

当列表为空时,begin()迭代器比较等于end()迭代器。使用insert()迭代器调用end()会将值插入列表的末尾。 insert()不会使任何迭代器无效,因此,每次调用it时,您的end()变量仍保持insert()迭代器。

如果希望您的值与调用insert()的顺序相反,请使用insert()返回给您的迭代器,例如:

auto it = l.begin();
it = l.insert(it,10);
it = l.insert(it,20);
it = l.insert(it,30);

Live Demo

关于c++ - 当通知的迭代器参数初始化为空列表的开头时,list::insert行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com