在基于范围的 for 循环期间插入 std::list 的后面

inserting into the back of std::list during range based for loop

本文关键字:插入 std list for 于范围 范围 循环      更新时间:2023-10-16

我遇到了">在基于范围的循环 c++11 期间向向量添加元素",并且并不感到惊讶,不允许使用std::vector,因为追加会使迭代器无效。但是,插入std::list不会使任何迭代器无效,所以我想知道是否允许使用std::list而不是std::vector.

例如

std::list<int> list({1});
for (int &cur : list)
{
std::cout << cur << " ";
if (cur < 10)
{
list.push_back(cur + 1);
}
}

它似乎编译得很好,但我担心这是未定义的行为。

是的,插入/删除std::list的元素不会使元素的指针、引用或迭代器失效,但删除的元素除外。甚至结束迭代器也不会更改或失效。

因此,它是安全的。

但是,由于人们必须仔细考虑安全性,因此仍然不可取。