首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用反向迭代器调用erase

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

Stack Overflow用户
提问于 2009-12-02 09:41:10
回答 9查看 78.5K关注 0票数 213

我正在尝试这样做:

代码语言:javascript
复制
for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
    if ( *i == pCursor )
    {
        m_CursorStack.erase( i );
        break;
    }
}

然而,erase需要一个迭代器,而不是反向迭代器。有没有一种方法可以将反向迭代器转换为常规迭代器,或者另一种方法将该元素从列表中删除?

EN

回答 9

Stack Overflow用户

发布于 2010-09-28 08:33:21

请注意,如果在for循环中使用m_CursorStack.erase( (++i).base())可能会有问题(参见原始问题),因为它会更改i的值。正确的表达式是m_CursorStack.erase((i+1).base())

票数 16
EN

Stack Overflow用户

发布于 2009-12-02 10:19:31

虽然使用reverse_iteratorbase()方法并递减结果在这里有效,但值得注意的是,reverse_iterators没有被赋予与常规iterators相同的状态。通常,您应该更喜欢常规iterators而不是reverse_iterators (以及const_iterators和const_reverse_iterators),原因就像这样。有关原因的深入讨论,请参阅Doctor Dobbs' Journal

票数 3
EN

Stack Overflow用户

发布于 2011-10-18 23:05:15

代码语言:javascript
复制
typedef std::map<size_t, some_class*> TMap;
TMap Map;
.......

for( TMap::const_reverse_iterator It = Map.rbegin(), end = Map.rend(); It != end; It++ )
{
    TMap::const_iterator Obsolete = It.base();   // conversion into const_iterator
    It++;
    Map.erase( Obsolete );
    It--;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1830158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档