我正在使用C++上的迭代器,但在这里遇到了一些麻烦。它在interIterator++行的表达式(this-> _ Has_container())上显示“调试断言失败”。
距离列表是一个 vector >。我做错了什么?
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)