微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C迭代器问题

我正在使用C上的迭代器,我在这里遇到了一些麻烦.它在行interIterator上的表达式(this-> _Has_container())上说“Debug Assertion Failed”.
距离列表是矢量<矢量< 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐