Rimuovi elemento dal vettore in C++

Jinku Hu 12 ottobre 2023
  1. Usa il metodo erase() per rimuovere l’elemento dal vettore in C++
  2. Usa il metodo std::erase() per rimuovere l’elemento dal vettore in C++
  3. Usa std::erase() e std::remove() per rimuovere l’elemento dal vettore in C++
Rimuovi elemento dal vettore in C++

Questo articolo spiegherà diversi metodi su come rimuovere un elemento da un vettore in C++.

Usa il metodo erase() per rimuovere l’elemento dal vettore in C++

Il metodo erase() è una funzione membro della classe std::vector ed è capace di un singolo elemento del vettore o dell’intervallo specificato come [first, last]. La funzione restituisce un iteratore che segue l’ultimo elemento rimosso. Se viene rimosso un singolo elemento, come illustrato nell’esempio di codice seguente, l’iteratore passato deve essere dereferenziabile.

#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;
}

Produzione:

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

Usa il metodo std::erase() per rimuovere l’elemento dal vettore in C++

Questa std::erase() è una funzione non membro che accetta l’intervallo e il valore che viene confrontato con ogni elemento da eliminare ogni volta che viene trovato. Questo metodo potrebbe avere uno svantaggio quando un singolo elemento deve essere rimosso, ma puoi evitare questo comportamento passando il secondo argomento dalla variabile array - arr[index]. Come dimostrato nel prossimo esempio, erase rimuove solo l’elemento 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;
}

Produzione:

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

Usa std::erase() e std::remove() per rimuovere l’elemento dal vettore in C++

Questo metodo è chiamato Cancella-rimuovi idioma e rimuove ogni elemento che è uguale a un certo valore o soddisfa un criterio da un dato intervallo. Si noti che questa soluzione ha alcune caratteristiche eccezionali, come - non può essere utilizzata con contenitori che restituiscono 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;
}

Produzione:

map; vector; deque; list; set; map; stack; queue; map; span;
vector; deque; list; set; stack; queue; span;
Autore: 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

Articolo correlato - C++ Vector