J'ai un problème plutôt intéressant (intéressant pour moi quand même, étant débutant et tout): En C++ on peut plutôt facilement développer un vecteur avec push_back(), qu'on peut simplement mettre en boucle pour grandir autant que nécessaire . Le problème est, que je n'ai trouvé aucune fonctionnalité facile similaire pour réduire sa taille. Ce que je veux vraiment faire, c'est d'avoir un vecteur avec une taille prédéfinie, et puis disons de supprimer entièrement la seconde moitié (pas seulement les éléments contenus, mais la taille du vecteur devrait aussi être réduite). Un exemple:Comment supprimer une gamme d'éléments d'un vecteur en changeant sa taille (C++)?
vector<int> numrange;
for (int i=0; i<=100; ++i) {numrange.push_back(i);}
Cela fonctionne parfaitement pour la croissance du vecteur et son remplissage avec un nombre. Mais cela ne semble pas être autorisé:
int vectsize=numrange.size();
for (int i=vectsize; i>=(vectsize/2); --i) {numrange.erase(i);}
Vous voyez, je veux effacer tous les éléments ci-dessus 50, mais cela ne fonctionnera pas. Quelque chose à faire avec "aucune conversion connue de int à const itérateur"
Merci pour l'aide.
On dirait que vous pourriez avoir besoin l'idiome de suppression d'effacement – NathanOliver
'de numrange.resize (numrange.size()/2); 'redimensionnera' numsize' pour ne contenir que les premiers éléments 'numrange.size()/2', détruisant la dernière moitié des éléments du vecteur. – jaggedSpire
Quand vous dites "la taille du vecteur devrait également être réduite", voulez-vous dire "réduire la valeur retournée par' size' ", ou voulez-vous dire" réduire la valeur retournée par 'size' et' capacity' "? Ce dernier est plus dur (c'était presque impossible en C++ 98, je pense qu'il y a des mécanismes dans les versions plus récentes). –