Suppression d'un element dans un vecteur

Signaler
Messages postés
96
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
11 juillet 2006
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
je dispose d'un vecteur de 24 doubles.
je voudrais supprimer le premier element, puis les afficher.

l'affichage se fait bien, mais juste après le programme plante "out of range"
je ne vois pas ce qui cloche!!!!

si j'enlève la commande supprimant le premier element, tout vas bien.

y_values.erase(y_values.begin());

for(int i =0; i<y_values.size(); i++)
{

TRACE(" %g\t", y_values[i]);
}

merci de m'aider c"est urgent!!

9 réponses

Messages postés
14780
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Généralement, on utilise les iterateurs pour parcourir un vecteur:

using namespace std;
vector v1;
vector ::iterator Iter;

v1.push_back( 10 );
v1.push_back( 20 );
v1.push_back( 30 );
v1.push_back( 40 );
v1.push_back( 50 );

v1.erase( v1.begin( ) );
cout << "v1 =";
for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )
cout << " " << *Iter;
cout << endl;

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

J'imagine que l'indice 0 n'existe plus puisque tu l'as retiré.

esseye ceci :

for(int i = y_values.begin(); i < y_values.size(); i++)
{
...
}
Messages postés
14780
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Attention!
y_values.begin() retourne un itérateur sur le 1er élément, et non son index

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
96
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
11 juillet 2006

ça ne marche pas.
je vais voir avec autre chose, les listes peut être, car quand j'aurai des elements à supprimer au milier, ça risque d'etre le bordel.
merci
Messages postés
14780
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Mon exemple ne fonctionne pas!? De quel type est ton vecteur? Peux-tu poster un bout de code?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
96
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
11 juillet 2006

vector <double>::iterator Iter;
y_values.erase(y_values.begin());

for(Iter = y_values.begin( ) ; Iter != y_values.end( ) ; Iter++ )
{
TRACE( "\nvaleurs y2 %f\t," , y_values(Iter) );
}
Messages postés
14780
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
*Iter te donne directement l'élément du vecteur

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
96
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
11 juillet 2006

c'est déjà essayé.
je suis partie avec les listes, il parait que c plus simple.
je cherche à obtenir le iè element de la liste, puis l'effacer.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bas oui, et surtout c'est fait pour ca, si tu as bcp d'éléments a supprimer.

int suppr = 10;

int count = 0;

for (std::list<ton_type>::iterator it = _list.begin(); it != _list.end(); it++, count++)

{

if (count == suppr)

{

it = _list.erase(it); // _it devient l'élement suivant

}

}



Donc ca, ca ne marche que si tu dois supprimer une seule valeur. Enfin
faut se méfier avec l'itérateur renvoyé par erase. Comme c'est
l'élément suivant, le it++ du for va encore se déplacer dans l'élement
suivant. Donc on saute certaine valeur de la liste quand on supprime un
élement.