Suppression d'un element dans un vecteur

CeNedra83 Messages postés 96 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 11 juillet 2006 - 31 mars 2006 à 15:39
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 31 mars 2006 à 17:03
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

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2006 à 15:49
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
0
Zootella Messages postés 252 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 septembre 2006
31 mars 2006 à 15:57
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++)
{
...
}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2006 à 16:02
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
0
CeNedra83 Messages postés 96 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 11 juillet 2006
31 mars 2006 à 16:05
ç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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2006 à 16:24
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
0
CeNedra83 Messages postés 96 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 11 juillet 2006
31 mars 2006 à 16:30
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) );
}
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2006 à 16:34
*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
0
CeNedra83 Messages postés 96 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 11 juillet 2006
31 mars 2006 à 16:53
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.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
31 mars 2006 à 17:03
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.
0
Rejoignez-nous