考虑一下:
// 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; }
目标是访问集合中的每个元素一次.我认为在将元素插入a1后,迭代器无效.
输出是
3 4 5 6
1,2不打印.
我们如何编码这样的情况.
解决方法
实际上,迭代器仍然有效.集合是基于节点的容器.
问题是在一个集合中,元素总是被排序.在插入之前,您的设置如下所示:
3 4 5 ^ iter
插入后,您的设置如下所示:
1 2 3 4 5 6 ^ iter
如果您希望能够做您正在做的事情,您将不得不使用不同的容器.