我正在尝试做这样的事情:
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接受的是正向迭代器而不是反向迭代器。是否有一种方法可以将反向迭代器转换为正向迭代器或另一种方法来从列表中删除该元素?
i != m_CursorStack.rend()
中所做的那样反复计算结束迭代器。相反,应该写成i = m_CursorStack.rbegin(), end = m_CursorStack.rend(); i != end;
。也就是说,初始化一个您可以保留用于重复比较的迭代器--假设结束位置不会因循环体的副作用而改变。 - sehstd::remove
,你又能得到什么好处? - Jerry Coffin