如何修改vector中的struct元素

How to modify a struct element in a vector?

本文关键字:vector 中的 struct 元素 修改 何修改      更新时间:2023-10-16

我正在编写一个记录酒店宠物的程序(作业练习)。我使用向量来保存结构元素(宠物)。结构体的代码如下:

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);
}

好了,现在我需要创建一个函数,通过输入名称来修改宠物。我有一个删除宠物的函数,它是这样的:

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

是否有类似的方法来修改元素?

使用std::find_if

auto iter = std::find_if(pet.begin(), pet.end(),
                        [&](Pets const & pet) {return pet.Name == name;});
if ( iter != pet.end() )
{
   // Modify the object
}

建议的代码改进。

  1. Pet代替Pets作为struct的名称

  2. 宠物的std::vector使用petspetList变量代替pet

这是一种方法:

void ModifyPet(vector<Pets> &pet, std::string name, std::string new_name) {
    vector<Pets>::iterator it;
    for (it = pet.begin(); it != pet.end(); it++)
    {
        if (it->Name == name)
        {
            it->Name = new_name;
            break;
        }
    }
}