c++ - 原位删除元素的最佳方法

标签 c++ stl set

<分区>

我有一组要迭代的对象,但是我可能会在迭代过程中决定现在需要删除其中一个(或多个)对象。

我的代码如下:

if( ! m_Container.empty() )
    {
        for(  typedefedcontainer::iterator it = m_Container.begin();
              it != m_Container.end(); 
              ++it  )
        {
            if( ! ( SomeFunction( (*it), "test", "TEST!", false ))  )
            {
            // If function returns false, delete object.
                m_Container.erase( it );
                AsyncResponseStore::iterator it = m_asyncResponses.begin();
            }

        }


    }

当然,当我删除一个对象时,我得到一个错误:“Map/set iterator not incrementable”。有人可以建议更好的方法吗?

参见: What happens if you call erase() on a map element while iterating from begin to end?

最佳答案

这取决于容器。列表容器通过从表示列表中下一项的删除方法返回一个新的迭代器来支持枚举期间的删除。 map 不支持这个。

map 的一个简单方法是将要删除的项目累积在一个单独的列表中,然后在处理完 map 后遍历该列表以从 map 中删除项目。这假设您可以将删除推迟到迭代完成。如果不是,那么您别无选择,只能为每次删除重新启动迭代。

关于c++ - 原位删除元素的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/353296/

相关文章:

c++ - 为char数组动态分配内存

c++ - protected ifstream 成员

c++ - 为什么我不能通过传入的类对象参数杀死 pthread

c++ - 如何强制清除 STL 内存缓存?

java - Common Lisp 是否有类似 java 的 Set 接口(interface)/实现类的东西?

c++ - 双倍或 float

c++ - 按降序对 vector 进行排序

c++ - Visual Studio std::stringstream pubsetbuf 不起作用

arrays - Postgresql IN 与 ANY 运算符与子查询的性能差异

python - 根据共存规则将列表拆分为多个组