vector erase() y clear() en C++

Los vectores son lo mismo que las arrays dinámicas con la capacidad de cambiar su tamaño automáticamente cuando se inserta o elimina un elemento, y el contenedor maneja automáticamente su almacenamiento.

vector::clear()

La función clear() se utiliza para eliminar todos los elementos del contenedor de vectores, haciéndolo así de tamaño 0.

Sintaxis: 

vectorname.clear()
Parameters :
No parameters are passed.
Result :
All the elements of the vector are
removed ( or destroyed )

Ejemplos: 

Input  : myvector= {1, 2, 3, 4, 5};
         myvector.clear();
Output : myvector= {}

Input  : myvector= {};
         myvector.clear();
Output : myvector= {}

Errores y Excepciones
1. No tiene garantía de lanzamiento de excepciones. 
2. Muestra error cuando se pasa un parámetro.

CPP

// CPP program to illustrate
// Implementation of clear() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector;
    myvector.push_back(1);
    myvector.push_back(2);
    myvector.push_back(3);
    myvector.push_back(4);
    myvector.push_back(5);
  
    // Vector becomes 1, 2, 3, 4, 5
  
    myvector.clear();
    // vector becomes empty
  
    // Printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

Producción: 

No Output

Complejidad temporal: O(N) 
Todos los elementos se destruyen uno a uno.

vector::clear()

La función erase() se usa para eliminar elementos de un contenedor desde la posición o rango especificado.
Sintaxis: 

1. vectorname.erase(position)
2. vectorname.erase(startingposition, endingposition)
Parameters :
Position of the element to be removed in the form of iterator.
or the range specified using start and end iterator.
Result :
Elements are removed from the specified
position of the container.

Ejemplos: 

Input  : myvector= {1, 2, 3, 4, 5}, iterator= myvector.begin()+2
         myvector.erase(iterator);
Output : 1, 2, 4, 5

Input  : myvector= {1, 2, 3, 4, 5, 6, 7, 8}, iterator1= myvector.begin()+3, iterator2= myvector.begin()+6
         myvector.erase(iterator1, iterator2);
Output : 1, 2, 3, 7, 8

Errores y Excepciones
1. No tiene garantía de lanzamiento de excepción si la posición es válida. 
2. De lo contrario, muestra un comportamiento indefinido.
Quitar un elemento de una posición particular:

CPP

// CPP program to illustrate
// working of erase() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector{ 1, 2, 3, 4, 5 };
    vector<int>::iterator it;
  
    it = myvector.begin();
    myvector.erase(it);
  
    // Printing the Vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

Producción: 

2 3 4 5

Eliminar elementos dentro de un rango:

CPP

// CPP program to illustrate
// Implementation of erase() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector{ 1, 2, 3, 4, 5 };
    vector<int>::iterator it1, it2;
  
    it1 = myvector.begin();
    it2 = myvector.end();
    it2--;
    it2--;
  
    myvector.erase(it1, it2);
  
    // Printing the Vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

Producción: 

4 5

Aplicación 
Dada una lista de enteros, elimine todos los elementos pares del vector e imprima el vector. 

Input  :1, 2, 3, 4, 5, 6, 7, 8, 9
Output :1 3 5 7 9
Explanation - 2, 4, 6 and 8 which are even are erased from the vector

Algoritmo 
1. Ejecutar un ciclo hasta el tamaño del vector. 
2. Verifique si el elemento en cada posición es divisible por 2, si es así, elimine el elemento y disminuya el iterador. 
3. Imprime el vector final.

GeeksforGeeks-CPP-Foundation-Course

CPP

// CPP program to illustrate
// Application of erase() function
#include <iostream>
#include <vector>
using namespace std;
  
int main()
{
    vector<int> myvector{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  
    for (auto i = myvector.begin(); i != myvector.end(); ++i) {
        if (*i % 2 == 0) {
            myvector.erase(i);
            i--;
        }
    }
  
    // Printing the vector
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

Producción: 

1 3 5 7 9

Complejidad de tiempo: O (N) en el peor de los casos, ya que un borrado toma un tiempo lineal.

clear() vs erase(), ¿cuándo usar qué?

clear() elimina todos los elementos de un contenedor de vectores, por lo que su tamaño es 0. Todos los elementos del vector se eliminan mediante la función clear(). 
La función erase() , por otro lado, se usa para eliminar elementos específicos del contenedor o un rango de elementos del contenedor, reduciendo así su tamaño por la cantidad de elementos eliminados.

Publicación traducida automáticamente

Artículo escrito por AyushSaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *