C ++迭代器问题 [英] C++ iterators problem
问题描述
我使用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屋!