文章目录
-
问题代码
std::map<int, int> test; test[1] = 10; test[2] = 20; map <int, int>::iterator it = test.begin(); map <int, int>::reverse_iterator rit = test.rbegin(); for (;rit != test.rend();) { cout << "t1 "<< rit->first << endl; test.erase(--(rit++).base()); // code 1 //test.erase(--rit.base()); // code 2 cout << "t2 " << rit->first << endl; } // 输出 t1 2 t2 1 t1 1 t2 0 t1 0 // 这里还能访问到t1已经是不对了
-
问题复现
- 从正常使用的逻辑来讲,应当是code 1的使用方式,但是正确的却是code 2
- https://stackoverflow.com/questions/404258/how-do-i-erase-a-reverse-iterator-from-an-stl-data-structure
-
查看stl源码
/**
* Bidirectional and random access iterators have corresponding