deque::clear() y deque::erase() en C++ STL

Las colas Deque o de doble extremo son contenedores de secuencia con la función de expansión y contracción en ambos extremos. Son similares a los vectores, pero son más eficientes en el caso de inserción y eliminación de elementos al final, y también al principio. A diferencia de los vectores, es posible que no se garantice la asignación de almacenamiento contiguo.
 

deque::clear()

La función clear() se usa para eliminar todos los elementos del contenedor deque, haciendo así su tamaño 0. 
Sintaxis: 

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

Ejemplos: 

Entrada: mydeque = {1, 2, 3, 4, 5}
           mydeque.clear();
Salida : mydeque = {}

Entrada: mydeque = {}
           mydeque.clear();
Salida: mydeque = {}

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 <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque{ 1, 2, 3, 4, 5 };
 
    mydeque.clear();
    // Deque becomes empty
 
    // Printing the deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 
deque::clear()

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

1. dequename.erase(position)
2. dequename.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 i.e., [start iterator, end iterator).
Result :
Elements are removed from the specified
position of the container.

Ejemplos: 

Entrada: mydeque{1, 2, 3, 4, 5}, iterador= 2
           mydeque.erase(iterador);
Salida: 1, 2, 4, 5

Entrada: mydeque{1, 2, 3, 4, 5, 6, 7, 8}, iterator1= 3, iterator2= 6
            mydeque.erase(iterator1, iterator2);
Salida: 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 elementos de una posición particular 
 

CPP

// CPP program to illustrate
// Implementation of erase() function
#include <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque{ 1, 2, 3, 4, 5 };
    deque<int>::iterator it;
 
    it = mydeque.begin();
    mydeque.erase(it);
 
    // Printing the deque
    for (auto it = mydeque.begin(); it != mydeque.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 <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque{ 1, 2, 3, 4, 5 };
    deque<int>::iterator it1, it2;
 
    it1 = mydeque.begin();
    it2 = mydeque.end();
    it2--;
    it2--;
 
    mydeque.erase(it1, it2);
 
    // Printing the deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 4 5

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

Entrada: 1, 2, 3, 4, 5, 6, 7, 8, 9
Salida: 1 3 5 7 9
Explicación: 2, 4, 6 y 8 que son pares se borran del deque

Algoritmo:
1. Ejecutar un bucle hasta el tamaño de la deque. 
2. Verifique si el elemento en cada posición es divisible por 2, si es así, elimine el elemento e incremente el iterador, de lo contrario, simplemente incremente el iterador para verificar el siguiente elemento. 
3. Imprime el deque final.
 

CPP

// CPP program to illustrate
// Application of erase() function
#include <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    deque<int>::iterator i;
    i = mydeque.begin();
    while (i != mydeque.end()) {
        if (*i % 2 == 0)     
 /* Not a good idea to erase inside loop, if you delete last element,
 mydeque.end() cannot be found resulting in infinite loop */
            mydeque.erase(i);
        i++;       
    }
 
    // Printing the deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 1 3 5 7 9
clear() VS clear() . ¿Cuándo usar qué?

clear() elimina todos los elementos de un contenedor de deque, por lo que su tamaño es 0. Todos los elementos de deque 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.

Veamos las diferencias en forma tabular -:

  deque::clear()  deque::clear() 
1. Se utiliza para eliminar todos los elementos del deque. Se utiliza para eliminar del contenedor deque un solo elemento o un rango de elementos
2.

Su sintaxis es -:

clear()

Su sintaxis es -:

borrado de iterador (posición de const_iterator);

3. No toma ningún parámetro. Su complejidad es lineal.
4. No tiene ningún valor de retorno.

Toma dos parámetros que son -:

1. Iterador que apunta a un solo elemento que se eliminará del deque.

2. Iteradores que especifican un rango dentro del deque que se eliminará

5. Su complejidad es lineal. Se define en el archivo de encabezado <deque> .

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 *