C ++迭代器问题 [英] C++ iterators problem

查看:234
本文介绍了C ++迭代器问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用C ++的迭代器,我在这里有一些麻烦。它对表达式(这 - > _ Has_container())在线interterter ++上说调试失败失败。
距离列表是向量<载体, DistanceNode>>。我做错了什么?

I'm working with iterators on C++ and I'm having some trouble here. It says "Debug Assertion Failed" on expression (this->_Has_container()) on line interIterator++. Distance list is a vector< vector< DistanceNode > >. What I'm I doing wrong?

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      


推荐答案

c $ c> erase()返回一个新的迭代器到下一个元素。到已擦除元素和到其后的元素的所有迭代器都将失效。你的循环忽略这个,并继续使用 interIterator

vector's erase() returns a new iterator to the next element. All iterators to the erased element and to elements after it become invalidated. Your loop ignores this, however, and continues to use interIterator.

你的代码应该看起来像这样: / p>

Your code should look something like this:

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

这篇关于C ++迭代器问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆