4

我遇到了“在基于范围的循环 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);
    }
}

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

4

1 回答 1

2

是的,插入/删除 a 的元素std::list不会使指向元素的指针、引用或迭代器无效,被删除的元素除外。甚至结束迭代器也没有改变或失效。

因此,它是安全的。

但由于必须仔细考虑安全性,这仍然是不可取的。

于 2020-02-02T01:19:04.097 回答