Comment retirer un élément d'un vecteur en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la méthode erase() pour retirer un élément d’un vecteur en C++
  2. Utilisez la méthode std::erase() pour supprimer un élément du vecteur en C++
  3. Utilisez std::erase() et std::remove() pour supprimer l’élément du vecteur en C++
Comment retirer un élément d'un vecteur en C++

Cet article explique plusieurs méthodes pour retirer un élément d’un vecteur en C++.

Utilisez la méthode erase() pour retirer un élément d’un vecteur en C++

La méthode erase() est une fonction membre de la classe std::vector et est capable d’un seul élément du vecteur ou de l’intervalle spécifié comme [first, last]. La fonction retourne un itérateur suivant le dernier élément supprimé. Si un seul élément est supprimé, comme le montre l’exemple de code suivant, l’itérateur passé doit être déréférençable.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", `vector`, "deque", "list",     "set",
                            "map",   "stack",   "queue", "multimap", "span"};
  PrintVec(str_vec);

  // DELETE element "set"
  auto elem_to_remove = str_vec.begin() + 4;
  if (elem_to_remove != str_vec.end()) {
    str_vec.erase(elem_to_remove);
  }

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Production :

array; vector; deque; list; set; map; stack; queue; multimap; span;
array; vector; deque; list; map; stack; queue; multimap; span;

Utilisez la méthode std::erase() pour supprimer un élément du vecteur en C++

Cette fonction std::erase() est une fonction non membre qui prend la plage et la valeur qui est comparée à chaque élément à supprimer à chaque fois qu’il correspond. Cette méthode peut avoir un inconvénient lorsqu’un seul élément doit être supprimé, mais vous pouvez éviter ce comportement en passant le second argument par une variable de tableau - arr[index]. Comme le montre l’exemple suivant, erase ne supprime que l’élément array.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", `vector`, "deque", "list",     "set",
                            "map",   "stack",   "queue", "multimap", "span"};

  PrintVec(str_vec);

  // DELETE elemen "array"
  erase(str_vec, str_vec[0]);

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Production :

array; vector; deque; list; set; map; stack; queue; multimap; span;
vector; deque; list; set; map; stack; queue; multimap; span;

Utilisez std::erase() et std::remove() pour supprimer l’élément du vecteur en C++

Cette méthode est appelée Erase-remove idiom, et elle supprime tout élément qui est égal à une certaine valeur ou qui satisfait à un critère d’une gamme donnée. Notez que cette solution a des caractéristiques exceptionnelles, comme - elle ne peut pas être utilisée avec les conteneurs qui retourner const_iterator.

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"map", `vector`, "deque", "list", "set",
                            "map", "stack",   "queue", "map",  "span"};

  PrintVec(str_vec);

  // DELETES all elements with value "map"
  str_vec.erase(std::remove(str_vec.begin(), str_vec.end(), "map"),
                str_vec.end());

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

Production :

map; vector; deque; list; set; map; stack; queue; map; span;
vector; deque; list; set; stack; queue; span;
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Vector