我试图学习 C++ 中的 vector ,所以我写了一个非常基本的代码。基本上,我有一个 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 )
现在,应该将其从列表中删除,对吗?但是,相反,它给了我错误:
但这是不可能的。我已经使用Visual Studio调试了代码,并且看到索引值有效。 MyPersons的大小为5,索引为2。
任何帮助非常感谢。
真诚的
最佳答案
您不需要typedef struct _person
序言,这是C-ism。
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/