Hay dos formas en que puede usar para borrar un elemento en particular. tomemos un vector
std :: vector < int > v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(40);
v.push_back(50);
1) Forma no eficiente: aunque parece ser bastante eficiente, no es porque la función de borrado elimina los elementos y desplaza todos los elementos hacia la izquierda en 1. por
lo que su complejidad será O (n ^ 2)
std :: vector < int > :: iterator itr = v.begin();
int value = 40;
while ( itr != v.end() )
{
if(*itr == value)
{
v.erase(itr);
}
else
++itr;
}
2) Manera eficiente (RECOMENDADO) : También se conoce como ERASE - REMOVE idioms .
- std :: remove transforma el rango dado en un rango con todos los elementos que se comparan que no son iguales al elemento dado desplazado al inicio del contenedor.
- Por lo tanto, en realidad no elimine los elementos coincidentes. Simplemente cambió el no coincidente al inicio y le da un iterador al nuevo final válido. Solo requiere O (n) complejidad.
La salida del algoritmo de eliminación es:
10 20 30 50 40 50
como tipo de retorno de eliminar es iterador al nuevo final de ese rango.
template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val);
Ahora use la función de borrado del vector para eliminar elementos del nuevo extremo al extremo anterior del vector. Requiere O (1) tiempo.
v.erase ( std :: remove (v.begin() , v.end() , element ) , v.end () );
entonces este método funciona en O (n)