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

问题描述 投票:1回答:1

假设您有一个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

为什么会这样?

c++ list stl
1个回答
2
投票

当列表为空时,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

© www.soinside.com 2019 - 2024. All rights reserved.