Cómo quitar el elemento del vector en C++

Jinku Hu 12 octubre 2023
  1. Utiliza el método erase() para eliminar un elemento de un vector en C++
  2. Use std::erase() Método para quitar el elemento del vector en C++
  3. Usa std::erase() y std::remove() para quitar el elemento del vector en C++
Cómo quitar el elemento del vector en C++

En este artículo se explicarán varios métodos para eliminar un elemento de un vector en C++.

Utiliza el método erase() para eliminar un elemento de un vector en C++

El método erase() es una función miembro de la clase std::vector y es capaz de un solo elemento del vector o del rango especificado como [first, last]. La función devuelve un iterador después del último elemento eliminado. Si un solo elemento es removido, como se muestra en el siguiente ejemplo de código, el iterador pasado debe ser desreferenciable.

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

Resultado:

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

Use std::erase() Método para quitar el elemento del vector en C++

Esta std::erase() es una función no-miembro que toma el rango y el valor que se compara con cada elemento para borrar cada vez que se empareja. Este método puede tener una desventaja cuando un solo elemento necesita ser eliminado, pero puedes evitar este comportamiento pasando el segundo argumento por la variable del array - arr[index]. Como se demuestra en el siguiente ejemplo, erase sólo elimina el 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;
}

Resultado:

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

Usa std::erase() y std::remove() para quitar el elemento del vector en C++

Este método se llama Borrar-eliminar y elimina todo elemento que sea igual a un cierto valor o que satisfaga un criterio de un rango determinado. Fíjate que esta solución tiene algunas características excepcionales, como - no puede ser usada con contenedores que devuelvan 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;
}

Resultado:

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

Artículo relacionado - C++ Vector