繁体   English   中英

在C ++中,会弹出“调试断言失败”窗口,并且我得到矢量迭代器不兼容的错误运行时

[英]In C++, Debug assertion failed window pops up & I get vector iterators incompatible error runtime

我已经看到一些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++)
   {

   }
}

似乎您正在比较对应于不同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会导致未定义的行为。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM