Std erase ca marche pô

Résolu
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006 - 2 mai 2006 à 11:19
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 mai 2006 à 20:41
Bonjour, j essaye d utiliser erase (std) dans un vecteur d'entier, mais les valeurs sont
toujours la, ou est mon erreur de manipulation ?
merci !!

#include <vector>

using namespace std;

int main()
{
int i;
vector vect1d;

vect1d.resize(10); //10 elements
fill( vect1d.begin(), vect1d.end(), 100 ); //remplir avec des 100

vect1d.erase(vect1d.begin(), vect1d.end()); //devrait supprimer

for (i=0;i<10;i++)
{
cout << vect1d[i] << "\n"; //affiche 100 quand meme !
}
getchar();

return 0;
}

5 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
2 mai 2006 à 12:08
En effet, c'est un problème bizarre. surtout que si tu fais un cout << vect1d.size(); apres le erase il afficher 0.
A la limite, tu peut remplacer le i<10 par vect1d.size()
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 mai 2006 à 13:43
Moi j'ai une erreur d'exécution quand j'affiche vect1d[i] (ce qui est normal), et la size() retourne bien 0 (compilé avec VS 2005)
Quel est ton compilo? Il faudrait peut être en changer...
3
Amanobuo Messages postés 65 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 11 décembre 2006
2 mai 2006 à 15:31
J' ai essaye et vect1d.size() renvoie bien 0.
Je crois donc que effacer des valeurs dans un vecteur fonctionne comme un formatage logique dans une partition fat : les données sont toujours presente mais en ecriture pour d'autres programmes ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
2 mai 2006 à 20:21
Il me semble que lorsque tu utilises erase, il détruit la case, mais ne
vide pas la mémoire. Ton vector est bien remis a jour, mais pas la
mémoire donc ta valeur reste en mémoire. Donc je vois pas d'anomalie,
si ce n'est que tu as de la chance que la mémoire reste intact jusqu'à
ce que tu affiches les valeurs.
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 mai 2006 à 20:41
Petite précision: l'accès avec [] n'est pas contrôlé. Ainsi on peux très bien faire vect1d[i] et ca peut marcher. Si on veut un accès sécurisé, il y a la méthode at(i), qui vérifie l'index, et provoque une exception de type out_of_range si l'index n'est pas correct
0
Rejoignez-nous