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++ - 在使用 std::stod 之前初始化 QApplication 的奇怪错误

C++ 根据两个数据成员对对象进行排序

javascript - 在 Sharepoint 上 react 'Set is undefined'

c++ - basic_string 专有分配器

c++ - 在 C++ 中使用循环遍历数组,程序显示 "exit status -1"?

c++ - 用户模板化定义结构的 QList

c++ - 从标准容器迭代器派生

java - Collection<E> 和 Set<E> 是一样的吗?

python - 如何在Python中打印集合的最小值?

c++ - C++ 引用的工作原理