Недавно я нашел следующее в коде я поддерживать:Удаление последнего элемента с reverse_iterator
for (reverse_iterator rit = base_container::rbegin(); rit != base_container::rend() && 0 < N; N--)
{
another_container->push_back(*rit);
base_container::erase((++rit).base());
}
Он пытается удалить последний элемент из контейнера (Std :: список в данном случае) в цикл с использованием reverse_iterator. Дело в том, что похоже, что он должен работать должным образом, но это не так (некоторые повреждения памяти происходят из-за недействительных итераторов), и мне интересно, почему? Существуют ли какие-либо ограничения или правила, чтобы не делать этого?
Спасибо.
P.S. Чтобы предотвратить любые улучшения для решения, я уже переписал его, чтобы он работал. Вопрос в том, почему приведенный выше код работает неправильно?
Не ответ на ваш вопрос, но почему так сложно? Не можете ли вы сначала скопировать весь контейнер, а затем очистить его? Кроме того, что такое base_container? – MikeMB
std :: list как я написал выше – Rom098
Вы наследуете от контейнера как 'base_container ::' предлагает? :-( – Jarod42