una repetidos puedo posicion para numeros nodos lista funcion eliminar elementos elemento datos como borrar arreglo algoritmo c++ vector stl erase erase-remove-idiom

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);