C++迭代器问题

标签 c++ iterator vector

我在 C++ 上使用迭代器,我在这里遇到了一些麻烦。它在 interIterator++ 行的表达式 (this->_Has_container()) 上显示“调试断言失败”。 距离列表是一个 vector < vector< DistanceNode >>。我做错了什么?

vector< vector<DistanceNode> >::iterator externIterator = distanceList.begin();

   while (externIterator != distanceList.end()) {

    vector<DistanceNode>::iterator interIterator = externIterator->begin();

        while (interIterator != externIterator->end()){

          if (interIterator->getReference() == tmp){

     //remove element pointed by interIterator
     externIterator->erase(interIterator);             

          } // if
    interIterator++;
  } // while
  externIterator++;
   } // while      

最佳答案

vector 的 erase() 返回一个指向下一个元素的新迭代器。被删除元素的所有迭代器和它之后的元素都会失效。然而,您的循环忽略了这一点,并继续使用 interIterator

您的代码应如下所示:

if (condition)
    interIterator = externIterator->erase(interIterator);
else
    ++interIterator;  // (generally better practice to use pre-increment)

关于C++迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728551/

相关文章:

c++ - 将 std::string 转换为 char* const* 的数组

c++ - 规范化包含编译时*或*运行时值的对象构造

c++ - 按字母顺序对 JSON 值进行排序 C++

c++ - 为什么真陈述是假的?

c++ - 带有模板参数的 make_tuple 不编译

Java 迭代列表 <?扩展通量>

c++ - 我可以将反向迭代器转换为正向迭代器吗?

rust - 实现迭代器时如何返回引用?

c++ - 如何从基类 vector 到达派生类变量?

javascript - JavaScript 中的按元素运算