Bonjour,
Comment supprimer dans un vector de la bibliothèque STL, l'élément qui est à la position i du vecteur ?
Merci,
Christophe,
Version imprimable
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:
1
2 std::vector<type>::iterator it=tonvector.begin()+i;
Code:
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"); }
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)Citation:
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" ;)
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:
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");