在C ++中,弹出Debug assertion failed窗口,我得到了矢量迭代器不兼容的错误运行时

问题描述 投票:0回答:1

我已经看到一些SO链接,其中看到了类似的错误,并且被建议使用const引用向量,因为它们正在复制向量(按值传递)但在我的场景中我使用相同的向量(没有通过值) 。但看到这个问题。 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++)
   {

   }
}
c++ c++11 vector iterator incompatibletypeerror
1个回答
3
投票

看起来您正在比较两个对应于不同vector对象的迭代器。

例如,

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

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

即使iter_aiter_b属于同一类型,但不允许比较它们。使用iter_a == iter_biter_a != iter_b是造成未定义行为的原因。

从你的帖子中不清楚为什么你需要比较迭代器,但你必须重新考虑你的实现策略。

© www.soinside.com 2019 - 2024. All rights reserved.