我正在尝试这样做:
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需要一个迭代器,而不是反向迭代器。有没有一种方法可以将反向迭代器转换为常规迭代器,或者另一种方法可以从列表中删除该元素?
有趣的是,这个页面上还没有正确的解决方案。所以,下面是正确的答案:
对于前向迭代器,解决方案是直接的:
std::list< int >::iterator i = myList.begin();
while ( i != myList.end() ) {
if ( *i == to_delete ) {
i = myList.erase( i );
} else {
++i;
}
}
在反向迭代器的情况下,你需要做同样的事情:
std::list< int >::reverse_iterator i = myList.rbegin();
while ( i != myList.rend() ) {
if ( *i == to_delete ) {
i = decltype(i)(myList.erase( std::next(i).base() ));
} else {
++i;
}
}
注:
你可以从一个迭代器构造一个reverse_iterator
你可以使用std::list::erase的返回值