Если вам не нужно стирать все по ходу дела, то для решения проблемы вы можете использовать идиому удаления-удаления:
m_CursorStack.erase(std::remove(m_CursorStack.begin(), m_CursorStack.end(), pCursor), m_CursorStack.end());
std::remove
меняет все элементы в контейнере, которые соответствуют pCursor
, до конца и возвращает итератор к первому элементу соответствия. Затем erase
, использующий диапазон, сотрет с первого совпадения и перейдет к концу. Порядок несовпадающих элементов сохраняется.
Это может сработать быстрее для вас, если вы используете std::vector
, где удаление в середине содержимого может потребовать большого количества копирования или перемещения.
Или, конечно, ответы выше, объясняющие использование reverse_iterator::base()
, интересны и стоит знать, чтобы решить поставленную задачу, я бы сказал, что std::remove
лучше подходит.