c ++ 11 — В C ++ всплывающее окно с ошибкой подтверждения отладки & amp; Я получаю векторные итераторы несовместимые ошибки времени выполнения

Я видел некоторые ссылки SO, в которых была обнаружена похожая ошибка & Было предложено использовать константную ссылку на вектор, так как они копировали вектор (передача по значению), но в моем сценарии я использую тот же вектор (без передачи по значению). Но, видя эту проблему. WRT ниже кода, я вижу ошибку

Появляется окно с ошибкой отладки. & Я получаю векторные итераторы
несовместимая ошибка

во время выполнения, когда линия

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 = table.begin();
auto endIter = tabTypeIterVector[0];
for(auto itloop=startIter; itloop !=-endIter;itloop++)
{

}
}

0

Решение

Похоже, вы сравниваете два итератора, которые соответствуют разным vector объекты.

Например,

std::vector<int> a(5);
std::vector<int> b(5);

auto iter_a = a.begin();
auto iter_b = b.begin();

Даже если iter_a а также iter_b одного типа, сравнивать их нельзя. Использование любого iter_a == iter_b или же iter_a != iter_b является причиной неопределенного поведения.

Из вашего поста не ясно, зачем вам нужно сравнивать итераторы, но вам придется пересмотреть свою стратегию реализации.

3

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

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