Bonjour,
Comment supprimer dans un vector de la bibliothèque STL, l'élément qui est à la position i du vecteur ?
Merci,
Christophe,
Bonjour,
Comment supprimer dans un vector de la bibliothèque STL, l'élément qui est à la position i du vecteur ?
Merci,
Christophe,
Salut,
Cela se fait en deux temps:
Récupération de l'itérateur à la position i
suppression de l'élément (pour autant que i soit dans les limites du vecteur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::vector<type>::iterator it=tonvector.begin()+i;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if(i<tonvector.size()) { tonvector.remove(it); } else { throw std::out_of_range("indice hors limites"); }
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Il n'y a pas de remove dans vector. La réponse correcte était donnée dans le message précédant.
Je vois pas trop l'intérêt de faire ça "en deux temps" comme le dit koala01.
Bonjour,
Peut-être une possiblité .
V.erase( V.begin() + pos )
Salut.
edited !
Je voulais surtout attirer l'attention sur le fait qu'il faut accéder à l'itérateur ad-hoc (premier temps) avant d'utiliser la fonction erase (deuxième temps)Envoyé par loufoque
NOTA: je m'étais effectivement trompé entre erase et remove..., mais il n'empeche qu'il est toujours préférable de vérifier si, de fait, l'index fournis n'est pas "hors limites"![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Tellement préférable qu'aucun conteneur standard ne le fait avec operator[], bien plus utilisé que .at()
Sauf que, comme il faut un itérateur pour utiliser la méthode erase, et qu'il semble difficile de récupérer un itérateur en se basant sur la methode at(), il faut bien s'organiser différemment...
La méthode at ne differe que de l'operateur [] par le fait que at est susceptible de lancer une exception de type out_of_range... Mais, sinon, les deux renvoyent une référence sur l'objet se trouvant à l'index indiqué...
Comme il n'y a pas de méthode pour récupérer un itérateur au départ de la référence d'un élément, il faut bel et bien travailler sous la forme de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if(index>monvector.size()) { //ici, on peut utiliser +index pour déterminer l'iterateur sur l'élément à // supprimer... que ce soit sous la forme de monvector.erase(monvector.begin()+index); // ou sous la forme de std::vector<type>::iterator it=monvector.begin()+index; monvector.erase(it); } // pas obligatoire, mais préférable else throw std::out_of_range("indice hors limites");
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager