Vecteur.erase(iterator) et vecteur.clear() inactifs

Vecteur.erase(iterator) et vecteur.clear() inactifs - C++ - Programmation

Marsh Posté le 18-09-2011 à 17:49:02    

Bonjour à tous!
 
Voilà, dans le cadre de mes cours de POO on doit realiser en c++ un programme ou l'on enregistre dans un vecteur nommé "base" des éléments de type personne (structure définie au préalable) contenant nom et prénom, réalisant ainsi une petite base de données de personnes.
Le programme doit être capable de supprimer une personne du vecteur et d'effacer toutes les personnes, pour cela je comptais utiliser les méthodes base.erase(it) et base.clear cependant si je ré-affiche le contenu du vecteur après, je remarque que rien n'est effacé  :sweat:  
 
voici mes 2 fonctions:
 

Code :
  1. void supprimer (vector<personne> base, string nom, string prenom)
  2. {
  3. signed int i;
  4. i=chercher (base, nom, prenom);
  5. base.erase(base.begin()+i);
  6. }
  7. void efface(vector<personne> base)
  8. {base.clear();}


 
pouvez vous m'aider à résoudre ce mystère?
 
merci d'avance!


Message édité par ToutChoco le 18-09-2011 à 19:22:11
Reply

Marsh Posté le 18-09-2011 à 17:49:02   

Reply

Marsh Posté le 18-09-2011 à 18:05:47    

Faut pas faire passer avec un pointeur par hasard ?


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 18-09-2011 à 18:31:35    

non je ne pense pas car j'ai une fonction ajoute ou l'on utilise la méthode base.push_back et elle marche correctement :/

Reply

Marsh Posté le 18-09-2011 à 18:44:05    

Tu passes ton vecteur par copie surtout non ?

Reply

Marsh Posté le 18-09-2011 à 18:50:53    

je ne pense pas, car si la fonction push_back fonctionne, c'est que le vecteur n'est pas passé par copie :??:
 
il y a aussi le fait que les pointeurs c'est pour l'exo d'apès ;)

Reply

Marsh Posté le 18-09-2011 à 19:09:34    

ca manque de reference, tu passes tes trucs par copie.
 

Code :
  1. void supprimer (vector<personne>& base, string const& nom, string const& prenom)
  2. {
  3. signed int i;
  4. i=chercher (base, nom, prenom);
  5. base.erase(base.begin()+i);
  6. }
  7. void efface(vector<personne>& base)
  8. {base.clear();}


 
Revoir les base, ou le cas echeant, changez d'ecole

Reply

Marsh Posté le 18-09-2011 à 19:21:21    

ToutChoco a écrit :

je ne pense pas, car si la fonction push_back fonctionne, c'est que le vecteur n'est pas passé par copie :??:
 
il y a aussi le fait que les pointeurs c'est pour l'exo d'apès ;)

Il n'y a pas de raison que push_back fonctionne, hein.
 

Code :
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. void ajouter(vector<int> v, int i)
  5. {
  6. v.push_back(i);
  7. cout << "v stores " << (int) v.size() << " numbers.\n";
  8. }
  9. int main ()
  10. {
  11.   vector<int> myvector;
  12.  
  13.   myvector.push_back(0);
  14.   cout << "myvector stores " << (int) myvector.size() << " numbers.\n";
  15.   ajouter(myvector, 10);
  16.   cout << "myvector stores " << (int) myvector.size() << " numbers.\n";
  17.   return 0;
  18. }


 

C:\Digital Mars\cpp>pbtest.exe
myvector stores 1 numbers.
v stores 2 numbers.
myvector stores 1 numbers.


A+,


Message édité par gilou le 18-09-2011 à 19:21:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2011 à 19:21:29    

Joel F a écrit :

ca manque de reference, tu passes tes trucs par copie.
 

Code :
  1. void supprimer (vector<personne>& base, string const& nom, string const& prenom)
  2. {
  3. signed int i;
  4. i=chercher (base, nom, prenom);
  5. base.erase(base.begin()+i);
  6. }
  7. void efface(vector<personne>& base)
  8. {base.clear();}


 
Revoir les base, ou le cas echeant, changez d'ecole


 
haha, tu juges bien vite, problème d'égo? d'amour propre?  :ange:  
Par ailleurs je te laisse regarder dans le dictionnaire la définition du verbe échoir, comme ca tu te coucheras moins bête ce soir, et tu ne fera plus cette faute de syntaxe ;)
tu as vu? moi je t'aide un peu quand même si tu ne sais pas...  
 
Pour finir, si tu avais lu 2 posts au dessus, tu aurais vu que l'utilisation des pointeurs n'est pas demandée dans cet exercice, puisque le cours ne les introduit qu'après...
 
je vais quand même passer au pointeurs, mais le chargé de TD nous a bien demandé de ne pas faire la partie pointeurs, c'est ce que je trouve bizarre... Ou alors il a pas vraiment regardé le TD...


Message édité par ToutChoco le 18-09-2011 à 19:32:49
Reply

Marsh Posté le 18-09-2011 à 19:27:34    

si tu avais lu ma reponse, tu verrais que je parle de reference.
 
Sinon, pour le reste, vu l'erreur que je reovis tout le temps, j'en deduit que tu subit encore un de ces cours de C++ antediluviens, je ne remets pas tes capacités en causes

Reply

Marsh Posté le 18-09-2011 à 19:28:38    

Bon...
ToutChoco, on vous dit un truc qui saute aux yeux, tellement c'est évident: vos passages de paramètres sont faits par copie.
Alors au lieu de comprendre ce que l'on vous dit, et d'agir en conséquence (en passant par référence les paramètres qu'on veut voir modifiés en sortie de la fonction) si vous continuez à écrire des stupidités avec agressivité au meilleur spécialiste de C++ du forum, vous allez pas faire long feu ici.
 
A+,

Message cité 1 fois
Message édité par gilou le 18-09-2011 à 19:29:14

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2011 à 19:28:38   

Reply

Marsh Posté le 18-09-2011 à 19:42:06    

gilou a écrit :

Bon...
ToutChoco, on vous dit un truc qui saute aux yeux, tellement c'est évident: vos passages de paramètres sont faits par copie.
Alors au lieu de comprendre ce que l'on vous dit, et d'agir en conséquence (en passant par référence les paramètres qu'on veut voir modifiés en sortie de la fonction) si vous continuez à écrire des stupidités avec agressivité au meilleur spécialiste de C++ du forum, vous allez pas faire long feu ici.
 
A+,


autant pour moi, j'ai cru que la phrase de Joel F sous entendait que je n'avais rien à faire dans une école ou l'on enseigne la POO car je n'en avais pas les capacités, après relecture il est possible que je me sois peut être trompé sur le sens  :whistle:  
si c'est le cas, je suis désolé  :jap:
 
alors va pour les références, j'essaie tout de suite, mais dans ce cas pourquoi push_back fonctionne? ce serait visual studio qui corrigerait automatiquement?


Message édité par ToutChoco le 18-09-2011 à 19:46:22
Reply

Marsh Posté le 18-09-2011 à 21:04:01    

Citation :

mais dans ce cas pourquoi push_back fonctionne?

Pourquoi dans ton exemple, il fonctionne?
Sans le code, comment savoir...

Citation :

j'ai cru que la phrase de Joel F sous entendait que je n'avais rien à faire dans une école ou l'on enseigne la POO car je n'en avais pas les capacités

Non. Il voulait dire que l'on ne t'enseignait peut être pas correctement le C++ (certains enseignants ne maîtrisant pas trop bien ce langage, cela donne lieu parfois à des cours de niveau médiocre, et il se demandait si ça n'était pas la cas ici).
A+,


Message édité par gilou le 18-09-2011 à 21:08:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-09-2011 à 21:57:37    

Tu fais tes puch_back dans ton main avec la déclaration du vector ?

Reply

Marsh Posté le 18-09-2011 à 23:03:14    

Joel F a écrit :

ca manque de reference, tu passes tes trucs par copie.
 

Code :
  1. void supprimer (vector<personne>& base, string const& nom, string const& prenom)
  2. {
  3. signed int i;
  4. i=chercher (base, nom, prenom);
  5. base.erase(base.begin()+i);
  6. }
  7. void efface(vector<personne>& base)
  8. {base.clear();}


 
Revoir les base, ou le cas echeant, changez d'ecole


 
Par hasard, faire passer avec des pointeurs ça résoudrait pas aussi le problème ? :D


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 18-09-2011 à 23:06:45    

si sauf que les pointeurs c'est moins safe que les references, et deuxio on est pas en C

Reply

Marsh Posté le 18-09-2011 à 23:07:29    

C'est quoi la différence alors ?


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 18-09-2011 à 23:54:27    

http://en.wikipedia.org/wiki/Reference_(C%2B%2B)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed