我是C的新手.我想知道经验丰富的编程人员这样做.
我拥有的:
set<int> s; s.insert(1); s.insert(2); s.insert(3); s.insert(4); s.insert(5); for(set<int>::iterator itr = s.begin(); itr != s.end(); ++itr){ if (!(*itr % 2)) s.erase(itr); }
当然,它不行.因为它被擦除后递增.
这是否意味着,我从设置中删除元素后每次都会指向集合的开始?
解决方法
for(set<int>::iterator itr = s.begin(); itr != s.end(); ){ if (!(*itr % 2)) s.erase(itr++); else ++itr; }
Scott Myers的有效STL