Во-первых, я относительно новичок в повышении.
У меня есть вектор типа: boost::container::vector<std::string> plates
и я повторяю это с
for ( unsigned int k = 0; k < plates.size(); k++ )
, пока все хорошо.
Теперь мне нужно удалить элементы из цикла, и я попытался сделать следующее:
plates.erase(plates.begin()+k);
но это дает мне вывод ниже и завершает мое приложение:
include/boost/container/vector.hpp:1595: boost::container::vector<T, Allocator, Options>::reference boost::container::vector<T,
, Options>::size_type) [with T = std::__cxx11::basic_string<char>; Allocator = boost::container::new_allocator<std::__cxx11::basic_string<char> >; Options = void; boost
:basic_string<char>&; boost::container::vector<T, Allocator, Options>::size_type = long unsigned int]: Assertion `this->m_holder.m_size > n' failed.
Что я здесь не так делаю?
Мой цикл выглядит примерно так, где foo()
возвращает указатель или NULL:
for ( unsigned int k = 0; k < plates.size(); k++ ) {
if (foo(&lpmap, plates[k]) != NULL){
std::cout << "DEBUG: erase" << std::endl;
plates.erase(plates.begin()+k);
} else {
std::cout << "print " << plates[k] << std::endl;
}
}
РЕДАКТИРОВАТЬ 1
for ( unsigned int k = 0; k < plates.size();) {
if (foo(&lpmap, plates[k]) != NULL){
std::cout << "DEBUG: erase" << std::endl;
plates.erase(plates.begin()+k);
} else {
std::cout << "print " << plates[k] << std::endl;
k++;
}
}