Quiero borrar un elemento de un vector utilizando el método de borrado. Pero el problema aquí es que no se garantiza que el elemento ocurra solo una vez en el vector. Puede estar presente varias veces y necesito borrarlas todas. Mi código es algo como esto:Borrando elementos de un vector
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
Este código se bloquea, obviamente, porque yo estoy cambiando el final del vector, mientras que la iteración a través de él. ¿Cuál es la mejor manera de lograr esto? Es decir. ¿Hay alguna manera de hacer esto sin iterar a través del vector varias veces o crear una copia más del vector?
'std :: remove()' desplaza elementos de modo que los elementos a eliminar se sobrescriban. El algoritmo no cambia el tamaño del contenedor, y si se eliminan elementos 'n', entonces no está definido cuáles son los últimos elementos' n'. – wilhelmtell
idioma de borrar-eliminar se describe en el elemento 32 del libro "STL efectivo: 50 formas específicas de mejorar el uso de la biblioteca de plantillas estándar" por Scott Meyers. –
¿Cómo podría actualizar esto para eliminar un objeto personalizado, en lugar de una primitiva? Me gustaría eliminar algo al iterar a través de un vector. –
Benjin