dme*_*ssf 3 c++ iterator vector
我正在使用C++上的迭代器,我在这里遇到了一些麻烦.它在行interIterator ++上的表达式(this - > _ Has_container())上说"Debug Assertion Failed".距离列表是向量<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
Run Code Online (Sandbox Code Playgroud)
Ash*_*ain 13
vector's erase()返回一个新的迭代器到下一个元素.擦除元素和元素失效后的所有迭代器.但是,你的循环忽略了这一点,并继续使用interIterator.
您的代码应如下所示:
if (condition)
interIterator = externIterator->erase(interIterator);
else
++interIterator; // (generally better practice to use pre-increment)
Run Code Online (Sandbox Code Playgroud)
迭代时,你不能从序列容器中删除元素 - 至少不是你这样做的方式 - 因为调用erase使迭代器失效.您应该将返回值分配给erase迭代器并抑制增量:
while (interIterator != externIterator->end()){
if (interIterator->getReference() == tmp){
interIterator = externIterator->erase(interIterator);
} else {
++interIterator;
}
}
Run Code Online (Sandbox Code Playgroud)
此外,在预增量(++ i)执行时,永远不要使用后增量(i ++).
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |