我正在尝试这样做:
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需要一个迭代器,而不是反向迭代器。有没有一种方法可以将反向迭代器转换为常规迭代器,或者另一种方法将该元素从列表中删除?
发布于 2010-09-28 08:33:21
请注意,如果在for
循环中使用m_CursorStack.erase( (++i).base())
可能会有问题(参见原始问题),因为它会更改i的值。正确的表达式是m_CursorStack.erase((i+1).base())
发布于 2009-12-02 10:19:31
虽然使用reverse_iterator
的base()
方法并递减结果在这里有效,但值得注意的是,reverse_iterator
s没有被赋予与常规iterator
s相同的状态。通常,您应该更喜欢常规iterator
s而不是reverse_iterator
s (以及const_iterator
s和const_reverse_iterator
s),原因就像这样。有关原因的深入讨论,请参阅Doctor Dobbs' Journal。
发布于 2011-10-18 23:05:15
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--;
}
https://stackoverflow.com/questions/1830158
复制相似问题