加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C迭代器问题

发布时间:2020-12-16 10:42:28 所属栏目:百科 来源:网络整理
导读:我正在使用C上的迭代器,我在这里遇到了一些麻烦.它在行interIterator上的表达式(this- _Has_container())上说“Debug Assertion Failed”. 距离列表是矢量矢量 DistanceNode取代.我做错了什么? vector vectorDistanceNode ::iterator externIterator = dist
我正在使用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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读