假设您有一个 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()
迭代器进行比较。使用 end()
迭代器调用 insert()
会将值插入到列表末尾。 insert()
不会使任何迭代器失效,因此您的 it
变量在每次调用 时仍保留
。end()
迭代器插入()
如果您希望值的顺序与调用 insert()
的顺序相反,请使用 insert()
返回给您的迭代器,例如:
auto it = l.begin();
it = l.insert(it,10);
it = l.insert(it,20);
it = l.insert(it,30);
关于c++ - 当通知迭代器参数初始化为空列表的开头时,list::insert 的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925270/