程序如下,循环体中do_nothing,只是在第2个for循环中初始化语句是iter2=iter1。程序运行时CPU利用率达到100%。容器换成deque问题依旧,只是用list时不会发生这种情况。
#include <vector> using namespace std; void main() { int ia[10]={0,1,2,3,4,5,6,7,8,9}; vector<int> vec1; vector<int>::iterator iter1=vec1.begin(); vector<int>::iterator iter2; for(int i=0; i<10; ++i) vec1.push_back(ia[i]); for( ; iter1!=vec1.end(); ++iter1) { for( iter2=iter1 ; iter2!=vec1.end(); ++iter2) {} } } |
典型的迭代器失效。iter1在你往vec1插入元素之后会失效(当然运气好的话就不会)。