set<int> s;
for(set<int>::iterator i = s.begin(); i != s.end(); ++i)
if (check(*i))
s.erase(*i);
vector 的 push_back 或者 pop_back 可能使原有的内存移动位置
vector<int> a;
for (vector<int>::iterator i = a.begin(); i != a.end(); ++i)
if (a[i] % 100 == 0)
a.push_back(rand());
在编译时打开 -D_GLIBCXX_DEBUG 并进行测试。
遍历 STL 容器时最好不要进行结构上的更改操作。
如果一定要一边遍历 set、map、multiset、multimap 一边进行删除,可以写成这样:
set<int> s;
for(set<int>::iterator i = s.begin(); i != s.end(); )
if (check(*i))
s.erase(i++);
else
i++;
或者 (只有在 C++11 及以上才能用):
set<int> s;
for(set<int>::iterator i = s.begin(); i != s.end(); )
if (check(*i))
i = s.erase(i);
else
i++;