C++11 迭代时添加到集合(C+;+;)

C++11 迭代时添加到集合(C+;+;),c++11,iterator,C++11,Iterator,如果我有以下代码(假设集合是无序集合): 它将在迭代时更新集合,并导致无休止的循环。如果我想在修改之前只迭代集合中的元素,如何确保添加新元素不会影响iteartion 如果我使用一个列表来执行此操作,代码将如下所示: myList.push_front(0); int i = 1; for(auto itr = myList.begin(); itr != myList.end(); ++itr){ myList.push_front(i); i++; } 但是集合没有push

如果我有以下代码(假设集合是无序集合):

它将在迭代时更新集合,并导致无休止的循环。如果我想在修改之前只迭代集合中的元素,如何确保添加新元素不会影响iteartion

如果我使用一个列表来执行此操作,代码将如下所示:

myList.push_front(0);
int i = 1;
for(auto itr = myList.begin(); itr != myList.end(); ++itr){
    myList.push_front(i);
    i++;
}
但是集合没有push_-front方法(有意义),但我想这样做,同时利用集合只包含唯一元素的事实。

你不能

可能的解决办法:

  • 创建集合的副本,在副本上迭代

  • 创建一个临时集,向其中添加新值,然后在迭代后将临时集中的所有值添加到原始集


  • 将它添加到某个容器中,然后合并。我是说,是的,但我有点希望避免类似的事情。如果不是的话,我想我只能这么做了。我如何创建一个集合的深度副本,然后再销毁它?为什么你需要一个深度副本?浅拷贝非常适合您的场景。至于破坏它,就让它超出范围。不管怎样,如果你有一个新问题,最好以新问题的形式发布,而不是评论。但是首先搜索,因为C++中有很多关于浅和浅拷贝的问题。您正在寻找的答案可能已经在这里:)
    myList.push_front(0);
    int i = 1;
    for(auto itr = myList.begin(); itr != myList.end(); ++itr){
        myList.push_front(i);
        i++;
    }