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

标签 c++ for-loop push-back stdlist for-range

我遇到了“ 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/

相关文章:

c++ - #include "SDL_image.h"搞乱了我的编译

c++ - 列表中的 std::is_constructible

For 循环中的 java.util.ConcurrentModificationException

Java : Populate arraylist with for loop

c++ - 为什么 vector push_back<shared_ptr<T>> 在我定义的类的 for 循环中不起作用

c++ - 通过#include 将文件内容分配给 char 数组

c++ - 简要描述 C 和 C++ 标准的资源

arrays - 删除字符串列表右侧的所有内容

c++ - 类的 vector 不存储单独的纹理

c++ - Point vector 中的 push_back() 不起作用