gpt4 book ai didi

c++ - 从 C++ 列表中删除项目

转载 作者:行者123 更新时间:2023-12-01 14:15:58 24 4
gpt4 key购买 nike

我正在尝试从 C++ 中的字符串列表中删除一些项目。代码编译成功,但在运行时出现“ 段错误(核心转储)”错误。我将代码抽象如下。

#include <iostream>
#include <list>
using namespace std;

int main()
{
//a string list
list<string> entries;

//add some entries into the list
entries.push_back("one");
entries.push_back("two");
entries.push_back("three");
entries.push_back("four");

//pass over the list and delete a matched entry
list<string>::iterator i = entries.begin();
while(i != entries.end())
{
if(*i=="two")
entries.erase(i); // *** this line causes the error ***
i++;
}

//print the result
for(const string &entry : entries)
cout<<entry<<"\n";
return 0;
}

最佳答案

std::list<T,Allocator>::erase 使删除元素的迭代器无效,即 i .之后的操作如 i++导致UB。

您可以将其赋值给 erase 的返回值,它是被移除元素之后的迭代器。

while(i != entries.end())
{
if(*i=="two")
i = entries.erase(i);
else
i++;
}

关于c++ - 从 C++ 列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61886286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com