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

时间:2018-08-08 21:08:33

标签: c++11 iterator

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

mySet.insert(0);
int i = 1;
for(auto itr = mySet.begin(); itr != mySet.end(); ++itr){
    mySet.insert(i);
    i++;
}

它最终将在迭代时更新集,并导致无限循环。如果我想在修改之前只对集合中的元素进行迭代,那么如何确保新元素的添加不会影响迭代?

如果要使用列表执行此操作,则代码应类似于:

myList.push_front(0);
int i = 1;
for(auto itr = myList.begin(); itr != myList.end(); ++itr){
    myList.push_front(i);
    i++;
}

但是没有用于集合的push_front方法(很有意义),但是我想利用集合仅包含唯一元素这一事实来做到这一点。

1 个答案:

答案 0 :(得分:2)

你不能。

可能的解决方法:

  1. 创建集合的副本,遍历该副本。

  2. 创建一个要添加新值的临时集,然后在迭代之后将所有值从该临时集添加到原始集。