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

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)

09-06 17:13