c++ - 如何从 vector 中删除结构元素?

标签 c++ vector struct

我是一名新手程序员,我正在开发一个程序,该程序在酒店中进行宠物登记(我们在类里面看到的一些愚蠢的练习,无关紧要)。我正在使用 vector 来保存结构元素(宠物)。该结构的代码是这样的:

struct Pets{
string Name;
string Race;
string Owner;
int Tel;
}p;

请求用户输入的函数是这样的:

AddPet(vector<Pets> &vtnew)
{
Pets newpet;
cout << "Enter the pet's name: " << endl;
cin >> newpet.Name;
cout << "Enter the pet's race: " << endl;
cin >> newpet.Race;
cout << "Enter the owner's name: " << endl;
cin >> newpet.Owner;
cout << "Enter the owner's telephone number: " << endl;
cin >> newpet.Tel;
vtnew.push_back(newpet);
}

好的,现在我需要创建一个函数来通过输入名称或其他内容来删除宠物。有什么办法吗?

最佳答案

vector 是一个未排序的容器,因此简单的解决方案确实是您唯一的选择。

void RemovePet(std::vector<Pet> & pets, std::string name) {
    pets.erase(
        std::remove_if(pets.begin(), pets.end(), [&](Pet const & pet) {
            return pet.Name == name;
        }),
        pets.end());
}

这被称为 Erase-remove idiom .

请注意,这将删除所有匹配该名称的宠物,而不仅仅是一个。

关于c++ - 如何从 vector 中删除结构元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062126/

相关文章:

c++ - 如何使用GNU Make从同一源编译程序的第二个版本?

c++ - 删除使用 const_iterator 的 vector 的元素

c++ - 大多数数据结构都可以用 vector 来实现吗?

c++ - C++中未定义的结构类型

从结构调用函数(C/汇编)

c - C中的交叉引用结构

c++ - 删除所有未找到的,即删除映射中未在集合中找到的所有键/值

c++ - mex 中 const size_t 的转换

c++ - 将 vector <unsigned char> 转换为 vector <unsigned short>

arrays - 在 Rust 中创建二维数组