Ошибка несовместимости векторных итераторов для одного вектора, содержащего итераторы другого вектора

Со ссылкой на это предыдущий вопрос , Я исправил свою ошибку & изменил итераторы на один и тот же «векторный тип», т.е.

Я заменил линию

auto startIter = table.begin ();

с

auto startIter = tabTypeIterVector [0];

в цикле for в функции AccessTableIteratorsVector ().
однако ниже кода, Я все еще получаю сообщение «Отладка не выполнена, ошибка несовместимости векторных итераторов,
когда эта строка попадает в цикл

itloop! = — endIter

typedef vector<vector<string> tableDataType;
vector<tableDataType::Iterator> tabTypeIterVector;
tableDataType table;
FillRows(vector<string> vstr)
{
table.push_back(vstr);
if(some_condition_satisfied_for_this_row())
{
tableDataType::Iterator rowIT = table.end();
tabTypeIterVector.push_back(rowIT);
}
}In another function:

AccessTableIteratorsVector()
{
auto startIter =  tabTypeIterVector[0];
auto endIter = tabTypeIterVector[1];
for(auto itloop=startIter; itloop !=-endIter;itloop++)
{

}
}

-3

Решение

push_back может привести к перераспределению данных, содержащихся в векторе. И это перераспределение сделает все итераторы для вектора недействительным. Разыменование недействительных итераторов приводит к неопределенное поведение.

Индексы в векторе будут оставаться действительными, пока вы не удалите элементы из вектора.

1

Другие решения

Других решений пока нет …