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++;