How do we iterate through all elements of a set while inserting new elements to it?

c++, stl

Solution

Actually, the iterator is still valid. A set is a node-based container.

The problem is that in a set the elements are always sorted. Before insertion, your set looks like this:

3 4 5
^
iter

After insertion, your set looks like this:

1 2 3 4 5 6
    ^
    iter

You'll have to use a different container if you want to be able to do what you're doing.

Problem

consider this: ``` // set_iterator.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <iostream> #include <set> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { set<int> a1; set<int> a2; a1.insert(3); a1.insert(4); a1.insert(5); a2.insert(1); a2.insert(2); a2.insert(6); set<int>::iterator iter; int x = 0; for (iter = a1.begin(); iter != a1.end(); ++iter) { if (x == 0) { x = 1; a1.insert(a2.begin(), a2.end()); } cout << *iter << endl; } system("pause"); return 0; } ``` goal is to visit each element of the set exactly once. i think the iterator is not valid after we insert elements into a1. output is 3 4 5 6 1,2 are not printed. how do we code such a situation.

Original source