Diferencia entre deque::assign y deque::at en C++

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. Aquí veremos la diferencia entre deque::assign y deque::at en C++.

Deque::asignar 

deque::assign se usa para asignar nuevos contenidos al contenedor deque reemplazando su contenido actual. Modifica el tamaño en consecuencia.

Sintaxis:

dequename.assign(<int> tamaño, <int> val)

Parámetros:

1. tamaño: especifica el número de valores a asignar al contenedor.
2. val: especifica el valor a asignar al contenedor.

En este contenedor, se invalidan todos los iteradores, punteros y referencias. El archivo de encabezado para usar deque::assign es <deque>. Si se lanza una excepción, el contenedor está en un estado válido.

A continuación se muestra el programa C++ para implementar deque::assign:

C++

// C++ program to implement deque::assign
#include <iostream>  
#include<deque>  
using namespace std;
  
// Driver code
int main()  
{  
  // Declaration of Deque
  deque<int> first = {10, 20, 30, 40, 50, 60};  
  deque<int> second;  
    
  // Iterator for deque to traverse 
  deque<int>::iterator itr = second.begin(); 
    
  // Assigning first deque elements 
  // into second
  second.assign(first.begin(),
                 first.end()); 
    
  cout << "Elements after assigning : ";
  for(itr = second.begin();
      itr != second.end(); ++itr)  
  {
    cout <<*itr<<" "; 
  }
    
  cout << endl;
  return 0;  
}
Producción

Elements after assigning : 10 20 30 40 50 60 
  • Complejidad temporal: O(N).
  • Complejidad espacial: O(N).

Deque::en

deque::at se usa para devolver una referencia al elemento en la posición x en el objeto contenedor deque. Deque::at comprueba automáticamente si x está dentro de los límites de los elementos válidos en el contenedor o no.

Sintaxis:

en (tamaño_tipo n);

Parámetros:

Posición del elemento a buscar.

Valor de retorno: Referencia directa al elemento en la posición dada.

En este contenedor todos los iteradores son válidos. El archivo de encabezado para usar deque::at es <deque>. 

Excepción:

  1. Si se lanza una excepción, no hay cambios en el contenedor.
  2. Lanza out_of_range si n está fuera de los límites.

A continuación se muestra el programa C++ para implementar deque::at:

C++

// C++ program to implement
// deque::at
#include <iostream>
#include <deque>
using namespace std;
  
// Driver code
int main ()
{
  // 10 zero-initialized unsigneds
  deque<int> gfg (10);   
  
  // Here we have assigned some values 
  for (int i = 0; i < gfg.size(); i++)
    gfg.at(i) = i;
  
  cout << "Elements after using deque::at -:";
  for (int i = 0; i < gfg.size(); i++)
  {
    cout << ' ' << gfg.at(i);
  }
    
  cout << endl;
  return 0;
}
Producción

Elements after using deque::at -: 0 1 2 3 4 5 6 7 8 9
  • Complejidad de tiempo: O(1)
  • Complejidad espacial: O(1)

deque::asignar vs deque::at

A continuación se muestran las diferencias entre deque::assign y deque::at:

Base deque::asignar deque::en
Definición Se utiliza para asignar nuevos contenidos al contenedor deque, reemplazando su contenido actual Se utiliza para devolver una referencia al elemento en la posición n en el objeto contenedor deque.
Sintaxis dequename.assign(<int> tamaño, <int> val); referencia en (tamaño_tipo n);
Nº de parámetros Toma dos parámetros. Toma solo un parámetro.
Valor devuelto No tiene ningún tipo de retorno. Devuelve una referencia directa al elemento en la posición dada.
Complejidad Su complejidad es lineal. Su complejidad es constante.

Publicación traducida automáticamente

Artículo escrito por mayank007rawa 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 *