如何修改向量中的struct元素?

时间:2015-08-19 03:56:15

标签: c++ vector struct

我正在开展一项计划,将宠物注册表保存在酒店(家庭作业)。我使用向量来保存结构元素(宠物)。结构的代码是这样的:

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

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

2 个答案:

答案 0 :(得分:1)

使用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. pets宠物使用变量petListpet代替std::vector

答案 1 :(得分:-1)

这是一种方法:

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

    }
}