【问题标题】:How to modify a struct element in a vector?如何修改向量中的结构元素?
【发布时间】:2015-08-19 03:56:14
【问题描述】:

我正在开发一个在酒店中记录宠物的程序(家庭作业)。我正在使用向量来保存结构元素(宠物)。结构的代码是这样的:

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

有没有类似的修改元素的方法?

【问题讨论】:

标签: c++ vector struct


【解决方案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. 对于宠物的std::vector,使用变量petspetList 而不是pet

【讨论】:

  • 不完整的答案,你为什么会停在那里而不提如何实际修改对象?
  • @nobism,OP 没有指出他们希望修改对象的哪个方面。我认为他们知道如何修改对象。
  • 这里值得指出的是,iter 是一个迭代器类型,它处理解引用操作符,因此也充当对象类型的指针,这里是Pets。您可以访问和分配字段值,就像它只是一个指针一样,例如 iter-&gt;Name
【解决方案2】:

这是一种方法:

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

    }
}

【讨论】:

  • 您应该意识到,使用 find_if 是惯用的,并且更好地使用标准库中的 find_if,这正是为此而重新发明的轮子,通常不应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多