向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量

时间:2017-07-23 11:51:02

标签: c++ c++11 vector iterator incompatibletypeerror

参考这个previous SO question,我纠正了我的错误&将迭代器更改为相同的“矢量类型”,即

我替换了

  

auto startIter = table.begin();

  

auto startIter = tabTypeIterVector [0];

在AccessTableIteratorsVector()函数的for循环中。 然而,在代码下面,我仍然得到“调试断言失败,矢量迭代器不兼容错误, 何时在for循环中点击此行

  

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++)
   {

   }
}

1 个答案:

答案 0 :(得分:1)

push_back可能会导致重新分配向量中包含的数据。并且该重新分配将使向量无效的所有迭代器。取消引用无效迭代器会导致undefined behavior

向量中的索引将继续保持有效,除非您从向量中删除元素。