В С++ всплывает окно с ошибкой утверждения отладки, и я получаю векторные итераторы, несовместимые с временем выполнения ошибки

Я видел несколько ссылок 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++)
   {

   }
}

person codeLover    schedule 20.07.2017    source источник


Ответы (1)


Похоже, вы сравниваете два итератора, которые соответствуют разным объектам 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 является причиной неопределенного поведения.

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

person R Sahu    schedule 20.07.2017
comment
Спасибо. Я исправил свою ошибку, однако все еще наблюдаю ту же ошибку. Поднял другой вопрос для этого здесь «Ошибка несовместимости векторных итераторов для вектора, содержащего итераторы другого ve»> stackoverflow.com/questions/45264761/ - person codeLover; 23.07.2017