gpt4 book ai didi

c++ - 无法从 C++ vector 中按索引删除项目

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:35 31 4
gpt4 key购买 nike

我正在尝试学习 C++ 中的 vector ,因此我编写了非常基础的代码。基本上,我有一个 vector ,它包含指向人结构的指针。是这样的:

typedef struct _person
{
unsigned long id;
char* name;
unsigned long age;
}person;

然后,我有一个这样定义的 vector :

vector<person*> MyPersons;

然后,为了进行测试,我创建了一些人员结构并通过 push_back 函数将它们推送到 vector。现在,例如,我想从我的 vector 中删除年龄为 25 岁的第一个人。所以,我所做的是在 vector 中搜索并获取那个人的索引,然后从 vector 中删除该索引。

for(size_t i = 0; i < MyPersons.size(); i++)
{
pperson = MyPersons.at(i);
if(pperson->age == 25)
{
index = i;
break;
}
}

MyPersons.erase(MyPersons.begin() + index )

现在,应该从列表中删除该项目,对吗?但是,相反,它给了我错误:

Debug Assertion Failed!

Expression: vector erase iterator outside range

但这是不可能的。我用 Visual Studio 调试了我的代码,我发现索引值是有效的。 MyPersons 大小为 5,索引为 2。

非常感谢任何帮助。此致

最佳答案

您不需要 typedef struct _person 序言,那是 C 主义。

struct person
{
unsigned long id;
std::string name;
unsigned long age;
}

你也不需要new对象,它们可以是值

std::vector<person> people;

要删除第一个 25 岁的人:

auto it = std::find_if(people.begin(), people.end(), [](person & p) { return p.age = 25; });
if (it != people.end()) people.erase(it);

要删除所有 25 岁的人:

auto it = std::remove_if(people.begin(), people.end(), [](person & p) { return p.age = 25; });
people.erase(it, people.end());

关于c++ - 无法从 C++ vector 中按索引删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50795740/

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