C++ 如何在对std::集进行迭代时从该集中删除元素

C++ 如何在对std::集进行迭代时从该集中删除元素,c++,stl,coding-style,set,C++,Stl,Coding Style,Set,如何在迭代时从std::set中删除元素 我的第一次尝试看起来像: set<T> s; for(set<T>::iterator iter = s.begin(); iter != s.end(); ++iter) { //Do some stuff if(/*some condition*/) s.erase(iter--); } set; for(set::iterator iter=s.begin();iter!=s.end();

如何在迭代时从
std::set
中删除元素

我的第一次尝试看起来像:

set<T> s;

for(set<T>::iterator iter = s.begin(); iter != s.end(); ++iter) {
    //Do some stuff
    if(/*some condition*/)
        s.erase(iter--);
}
set;
for(set::iterator iter=s.begin();iter!=s.end();++iter){
//做点什么
如果(/*某些条件*/)
s、 擦除(iter-);
}
但是如果我们想从集合中删除第一个元素,这是有问题的,因为
iter--
使迭代器无效


这样做的标准方法是什么?

标准方法是这样做

for(set<T>::iterator iter = s.begin(); iter != s.end();)
{
   if(/*some condition*/)
   {
      s.erase(iter++);
   }
   else
   {
      ++iter;
   }
}

第一段代码没有通过一个断言,即迭代器在可视化研究中不兼容。无论如何,正如您在代码中指出的,std::erase返回新的迭代器。
for(set<T>::iterator iter = s.begin(); iter != s.end();)
{
   if(/*some condition*/)
   {
      iter = s.erase(iter);
   }
   else
   {
      ++iter;
   }
}