在基于范围的 for 循环期间插入 std::list 的后面
inserting into the back of std::list during range based for loop
我遇到了">在基于范围的循环 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
的元素不会使元素的指针、引用或迭代器失效,但删除的元素除外。甚至结束迭代器也不会更改或失效。
因此,它是安全的。
但是,由于人们必须仔细考虑安全性,因此仍然不可取。
相关文章:
- 将重物插入std::map
- 在基于范围的 for 循环期间插入 std::list 的后面
- 插入 std::set 作为 std::map 的键
- 通过构造函数插入 std::map
- 将唯一指针插入std::映射
- 无法使用带有 std::move 的自定义删除器插入 std::unique_ptr
- 如何在声明时将对象插入 std::map
- 在这种情况下,插入 std::map 可能会失败?
- 如何在 C++11 中插入 std::map?
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 将排序范围插入 std::set 并带有提示
- 查找并插入-STD :: MAP C
- 使用类方法插入STD :: MAP
- C - 将值插入std :: map时
- 插入std :: basic_ostream实例化输出时的内存故障
- 如何将对象插入std::vector
- 用于插入 std::unordered_set 的 3D 间坐标的唯一键
- 如何使用迭代器插入std ::列表
- SegFault将插入std :: vector的成员函数插入std :: vector
- 在插入时插入std :: MAP中的模板类