Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1458 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2102081
ToutChoco
Posté le 18-09-2011 à 17:49:02  profilanswer
 

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
mood
Publicité
Posté le 18-09-2011 à 17:49:02  profilanswer
 

n°2102083
Terminapor
I'll see you rise.
Posté le 18-09-2011 à 18:05:47  profilanswer
 

Faut pas faire passer avec un pointeur par hasard ?


---------------
Perhaps you don't deserve to breathe
n°2102085
ToutChoco
Posté le 18-09-2011 à 18:31:35  profilanswer
 

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 :/

n°2102087
alexandre_​j
Posté le 18-09-2011 à 18:44:05  profilanswer
 

Tu passes ton vecteur par copie surtout non ?

n°2102088
ToutChoco
Posté le 18-09-2011 à 18:50:53  profilanswer
 

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

n°2102089
Joel F
Real men use unique_ptr
Posté le 18-09-2011 à 19:09:34  profilanswer
 

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

n°2102095
gilou
Modérateur
Modzilla
Posté le 18-09-2011 à 19:21:21  profilanswer
 

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é!  --
n°2102096
ToutChoco
Posté le 18-09-2011 à 19:21:29  profilanswer
 

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
n°2102097
Joel F
Real men use unique_ptr
Posté le 18-09-2011 à 19:27:34  profilanswer
 

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

n°2102098
gilou
Modérateur
Modzilla
Posté le 18-09-2011 à 19:28:38  profilanswer
 

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é!  --
mood
Publicité
Posté le 18-09-2011 à 19:28:38  profilanswer
 

n°2102099
ToutChoco
Posté le 18-09-2011 à 19:42:06  profilanswer
 

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
n°2102105
gilou
Modérateur
Modzilla
Posté le 18-09-2011 à 21:04:01  profilanswer
 

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é!  --
n°2102111
alexandre_​j
Posté le 18-09-2011 à 21:57:37  profilanswer
 

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

n°2102114
Terminapor
I'll see you rise.
Posté le 18-09-2011 à 23:03:14  profilanswer
 

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
n°2102115
Joel F
Real men use unique_ptr
Posté le 18-09-2011 à 23:06:45  profilanswer
 

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

n°2102116
Terminapor
I'll see you rise.
Posté le 18-09-2011 à 23:07:29  profilanswer
 

C'est quoi la différence alors ?


---------------
Perhaps you don't deserve to breathe
n°2102117
gilou
Modérateur
Modzilla
Posté le 18-09-2011 à 23:54:27  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Ordonner un Iteratorvecteur python
Pourquoi utiliser un iterator au lieu d'un for ? [résolu]construction d'une "LookAt matrix" avec un vecteur up
Utiliser un iterator sur un vector à 2 dimensions - positionvecteur de bits en language C !!!!
problème avec itérator c++C'est quoi un vecteur en language C ?
Tri vecteur de point 3D par abscisse[Résolu] Problème lors du tri d'un vecteur d'itérateurs
Plus de sujets relatifs à : Vecteur.erase(iterator) et vecteur.clear() inactifs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR