Мои приложения требуют итерации по вектору и удаления определенных элементов, которые не удовлетворяют требованиям. Что является самым правильным способом? Я считаю, что следующий путь неверен. Результат: я получаю ошибку сегментации.Удалить элементы из вектора в C++ 11 во время итерации по нему
std::vector<ObjectX> vec1;
//Fill in vec1
std::vector<ObjectX>::iterator itVec1 = vec1.begin();
for(;itVec1 != vec1.end(); ++itVec1) {
if (Oracle(*itVec1)) vec1.erase(itVec1);
}
Когда вы используете 'erase', он аннулирует итераторы и ссылки на или после точки стирания, в том числе end() итератор. –
Я обычно повторяю его в обратном порядке и использую доступ к индексу вместо векторного итератора –
Я чувствую себя двумя наиболее частыми вопросами C++, которые я вижу: как мне получить номера из 'std :: string' и почему моя программа segfault, когда аннулирование моего итератора. – erip