Tôi đang cố gắng làm một cái gì đó như thế này:
for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
if ( *i == pCursor )
{
m_CursorStack.erase( i );
break;
}
}
Tuy nhiên, erase mất một iterator chứ không phải iterator ngược. Có cách nào để chuyển đổi một trình vòng lặp ngược thành một trình vòng lặp thông thường hoặc một cách khác để loại bỏ phần tử này khỏi danh sách?
std::remove
?
i != m_CursorStack.rend()
. Thay vào đó, hãy viếti = m_CursorStack.rbegin(), end = m_CursorStack.rend(); i != end;
. Đó là, khởi tạo một trình vòng lặp mà bạn có thể giữ xung quanh để so sánh lặp đi lặp lại - giả sử rằng vị trí kết thúc sẽ không thay đổi như là một tác dụng phụ của cơ thể vòng lặp của bạn.