repetidos - C++ ¿Borrar elemento vectorial por valor en lugar de por posición?
funcion para eliminar en c++ (4)
¿Qué tal std::remove()
lugar:
#include <algorithm>
...
vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());
Esta combinación también se conoce como el lenguaje borrado-eliminar .
Esta pregunta ya tiene una respuesta aquí:
vector<int> myVector;
y digamos que los valores en el vector son esto (en este orden):
5 9 2 8 0 7
Si quisiera borrar el elemento que contiene el valor de "8", creo que haría esto:
myVector.erase(myVector.begin()+4);
Porque eso borraría el 4to elemento. Pero, ¿hay alguna forma de borrar un elemento basado en el valor "8"? Me gusta:
myVector.eraseElementWhoseValueIs(8);
¿O simplemente necesito recorrer todos los elementos vectoriales y probar sus valores?
Eric Niebler está trabajando en una propuesta de rango y algunos de los examples muestran cómo eliminar ciertos elementos. Eliminando 8. Crea un nuevo vector.
#include <iostream>
#include <range/v3/all.hpp>
int main(int argc, char const *argv[])
{
std::vector<int> vi{2,4,6,8,10};
for (auto& i : vi) {
std::cout << i << std::endl;
}
std::cout << "-----" << std::endl;
std::vector<int> vim = vi | ranges::view::remove_if([](int i){return i == 8;});
for (auto& i : vim) {
std::cout << i << std::endl;
}
return 0;
}
salidas
2
4
6
8
10
-----
2
4
6
10
No puedes hacer eso directamente. std::remove
usar el algoritmo std::remove
para mover el elemento a borrar al final del vector y luego usar la función de erase
. Algo como: myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end());
. Vea esto borrando elementos del vector para más detalles.
Puede usar std::find
para obtener un iterador a un valor:
#include <algorithm>
std::vector<int>::iterator position = std::find(myVector.begin(), myVector.end(), 8);
if (position != myVector.end()) // == myVector.end() means the element was not found
myVector.erase(position);