nee*_*eel 0 c++ stl segmentation-fault
我正在使用STL列表进行链接列表实现,但是当我在循环中使用擦除功能时,它会给出分段错误.有人能告诉我为什么会这样吗?
void remove(list<int> &myList,int N){
int k = 1;
list<int>::iterator it;
for(it = myList.begin(); it != myList.end();it++){
if(k == N){
myList.erase(it);
k = 1;
}
else
k++;
}
}
Run Code Online (Sandbox Code Playgroud)
在迭代器上调用erase时,它会使该迭代器失效.但是你继续使用它.您需要捕获erase的返回值,并将其返回给迭代器,如下所示:
it = myList.erase(it);
Run Code Online (Sandbox Code Playgroud)
但这需要你的循环稍微改变一下.如果你擦除,那么你不想增加,因为那样你将跳过一个元素.如果你最终删除最后一个元素,这尤其糟糕,因为那样你将移动到结束迭代器.所以,如果你不擦除,你应该只增加:
for(it = myList.begin(); it != myList.end(); ){
if(k == N){
it = myList.erase(it);
k = 1;
}
else
{
k++;
++it;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |