[c++] C ++ ¿Borrar elemento vectorial por valor en lugar de por posición?


1 Answers

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

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 4º elemento. Pero, ¿hay alguna forma de borrar un elemento basado en el valor "8"? Me gusta:

myVector.eraseElementWhoseValueIs(8);

¿O simplemente necesito iterar a través de todos los elementos del vector y probar sus valores?




Eric Niebler está trabajando en una propuesta de rango y algunos de los examples muestran cómo eliminar ciertos elementos. Quitar 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






Related