Я пытаюсь сделать что-то вроде этого:
for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
if ( *i == pCursor )
{
m_CursorStack.erase( i );
break;
}
}
Однако стирание требует итератор, а не обратный итератор. Есть ли способ преобразовать обратный итератор в обычный итератор или другой способ удалить этот элемент из списка?
std::remove
?
i != m_CursorStack.rend()
. Вместо этого пишиi = m_CursorStack.rbegin(), end = m_CursorStack.rend(); i != end;
. То есть инициализируйте итератор, который вы можете использовать для повторного сравнения - при условии, что конечная позиция не изменится как побочный эффект вашего тела цикла.