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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |