2015-08-18 2 views
1

Я новичок программист, и я работаю над программой, в которой хранится реестр домашних животных в отеле (некоторые глупые упражнения, которые мы видели в классе, не имеет значения). Я использую векторы для хранения элементов структуры (домашних животных). Код для структуры заключается в следующем:Как удалить элемент структуры из вектора?

И функция просить пользовательский ввод заключается в следующем:

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

Хорошо, теперь мне нужно создать функцию, чтобы удалить животное, введя имя или что-то. Есть ли способ сделать это?

+0

Сначала вы должны ознакомиться с книгой по внедрению на C++. – Lingxi

+1

Вы добавили их с помощью функции 'std :: vector':' push_back() '. Посмотрите, какие другие функции 'std :: vector' есть, что может позволить вам удалить элемент! – NoseKnowsAll

+1

Если ваша программа хочет использовать имя домашнего животного в качестве ключа для поиска соответствующей структуры «Домашние животные», более естественно использовать «std :: map » вместо «vector» - вы затем добавьте домашних животных, используя 'vtnew [newpet.Name] = newpet;' (возможно, захотите изменить имя переменной 'vtnew', чтобы быть более описательным) и удалить с помощью' vtnew.erase (some_pet_name); '. –

ответ

7

Вектор - это несортированный контейнер, поэтому простые решения - это ваш единственный выбор.

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.

Обратите внимание, что это удалит всех домашних животных, соответствующих этому имени, а не только одному.

+0

ОК, извините, что такое животные? Является ли это именем структуры или объекта? Спасибо –

+0

@DaveCarballo: Это правильно в прототипе функции: 'std :: vector & –

+0

Извините, как я могу назвать функцию позже? какие параметры следует использовать? –

Смежные вопросы