我在 C++ 上使用迭代器,我在这里遇到了一些麻烦。它在 interIterator++ 行的表达式 (this->_Has_container()) 上显示“调试断言失败”。 距离列表是一个 vector < vector< 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)
关于C++迭代器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728551/