surrimer un element d'un vector

surrimer un element d'un vector

by Mohae Ange Christian N'Guessan -
Number of replies: 4

Bonjour, en fait je voulais juste savoir comment supprimer une cellule d'un vector. j'ai fait des recherches pour avoir plus d'info mais j'aimerais avoir un avis exterieur.

Est ce que  myvector.erase (myvector.begin()+5) est un bon moyen de supprimer la 6eme cellule d'un vector myvector?

In reply to Mohae Ange Christian N'Guessan

Re: surrimer un element d'un vector

by Sepand Kashani -
La méthode `erase()` prend comme paramètre un itérateur, concept non-abordé au cours (pour le moment).
De ce fait, il n'y a pas de manière simple de raccourcir un tableau dynamique.

L'option que je recommande pour le moment est:
* si la dernière élément est à enlever, alors appeler la méthode `pop_back()`. (http://www.cplusplus.com/reference/vector/vector/pop_back/)
* si le i-ème élément de la liste doit être enlevé, alors simplement écraser les éléments aux cases {i, ..., N-2} avec celles aux cases {i+1, ..., N-1}, puis appeler `pop_back()` pour enlever la dernière case non-utilisée.
In reply to Sepand Kashani

Re: surrimer un element d'un vector

by Alexandre Julien Carbonell -

peut-on cependant utiliser tab.erase(tab.begin() + i) ou tab est le vector et i la position de l'élément à supprimer ?

In reply to Alexandre Julien Carbonell

Re: surrimer un element d'un vector

by Sepand Kashani -
Oui, cela marchera. Voici un exemple qui montre comment l'utiliser:
#include <vector>
#include <iostream>

int main() {
    std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';

    c.erase(c.begin());
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';

    c.erase(c.begin()+2, c.begin()+5);
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
}

/* Output
* 0 1 2 3 4 5 6 7 8 9
* 1 2 3 4 5 6 7 8 9
* 1 2 6 7 8 9
*/
In reply to Mohae Ange Christian N'Guessan

Re: surrimer un element d'un vector

by Jean-Cédric Chappelier -

Pour faire un complément aux réponses apportées (merci Sepand !) :

  1. tout code C++ valide est accepté, même s'il n'a pas été présent en cours tant que c'est correct du point de vue C++ c'est bon ;
  2. avant de modifier un vector, essayez peut être de trouver un algorithme qui laisse le laisse invariant (si c'est possible)
  3. si l'ordre n'est pas important, on peut aussi efficacement supprimer un élément d'un vector en effectuant un swap() avec le back() puis un pop_pack() ; c'est plus efficace que erase() (O(1) contre O(n) ; mais ça ne préserve pas l'ordre)