假设您有一个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
函数插入元素before迭代器指向的元素,因此获得的结果应该是: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);