相关疑难解决方法(0)

如何使用反向迭代器调用erase

我想做这样的事情:

for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
    if ( *i == pCursor )
    {
        m_CursorStack.erase( i );
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是擦除需要迭代器而不是反向迭代器.有没有办法将反向迭代器转换为常规迭代器或从列表中删除此元素的另一种方法?

c++

165
推荐指数
4
解决办法
6万
查看次数

如何从stl数据结构中删除reverse_iterator?

由于某种原因,以下代码失败.您不能简单地使用其base()方法擦除reverse_iterator.

#include <set>
#include <iostream>

int main()
{
    std::set<int> setOfInts;
    setOfInts.insert(1);
    setOfInts.insert(2);
    setOfInts.insert(3);

    std::set<int>::reverse_iterator rev_iter = setOfInts.rbegin();
    std::set<int>::reverse_iterator nextRevIter = setOfInts.rbegin();
    ++nextIter;

    while ( rev_iter != setOfInts.rend())
    {
        // Find 3 and try to erase
        if (*rev_iter == 3)
        {
            // SEGFAULT HERE
            setOfInts.erase( rev_iter.base());
        }
        rev_iter = nextRevIter;
        ++nextRevIter;
    }

}
Run Code Online (Sandbox Code Playgroud)

如何正确地做上述事情?如果reverse_iterator对应于您想要擦除的内容,那么如何删除它?

注意,遗憾的是不会使用reverse_iterator.它想要真实的东西.

c++ iterator stl

14
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×2

iterator ×1

stl ×1