J'utilise actuellement un vecteur pour contenir les personnes dans un programme. Je suis en train de le supprimer avecC++ Supprimer un objet dans un vecteur
vectorname.erase(index);
Je passe le vecteur dans une fonction, ainsi que l'élément que je veux supprimer. Mon principal problème est comment puis-je améliorer mon code en termes de vitesse de compilation?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class person {
private:
string name;
public:
person() {}
person(string n):name(n){}
const string GetName() {return name;}
void SetName(string a) { name = a; }
};
void DeleteFromVector(vector<person>& listOfPeople,person target) {
for (vector<person>::iterator it = listOfPeople.begin();it != listOfPeople.end();++it) {//Error 2-4
if (it->GetName() == target.GetName()) {
listOfPeople.erase(it);
break;
}
}
}
int main(){
//first group of people
person player("Player"), assistant("Assistant"), janitor("Janitor"), old_professor("Old Professor");
//init of vector
vector<person> listOfPeople = { player, assistant, janitor, old_professor };
DeleteFromVector(listOfPeople, janitor);
}
Pourquoi définissez-vous l'itérateur dans 'for', mais ne l'utilisez pas? –
Vous faites tout faux. Vous utilisez 'erase' mais vous ne prenez pas sa valeur de retour en tant que nouvel itérateur, donc après cela, vous utilisez des itérateurs incorrects et corrompus. Et, il y a une bien meilleure façon de le faire que vous pouvez voir ici http://en.cppreference.com/w/cpp/algorithm/remove et https://en.wikipedia.org/wiki/Erase%E2%80 % 93remove_idiom –
OK, je vois votre 'break' immédiatement après avoir utilisé' erase' donc je suppose que vous n'utilisez pas d'itérateurs invalides après tout. –