我遇到了“ Add elements to a vector during range-based 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 的元素不会使指向元素的指针、引用或迭代器无效,删除的元素除外。甚至最终迭代器也没有改变或失效。
因此,它是安全的。
但考虑到安全性,还是不可取的。
关于c++ - 在基于范围的 for 循环期间插入到 std::list 的后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022487/