get_allocator() en C++

En STL, los contenedores pueden cambiar de tamaño dinámicamente. Allocator es un objeto que es responsable de la asignación/desasignación de memoria dinámica. get_allocator() se usa para asignar fragmentos de memoria. Devuelve una copia del objeto asignador asociado con el contenedor. Se define en bibliotecas de vectores , mapas , listas y conjuntos .
Sintaxis:

allocator_type get_allocator() const;

Parámetro utilizado:  
esta función miembro no necesita pasar ningún parámetro.

Tipo de Retorno: 
Devuelve una copia del objeto asignador asociado al vector.

Errores y excepciones:
nunca arroja excepciones, por lo que no necesitamos ningún intento de captura que lo rodee.

Tiempo-Complejidad: 
Constante O(1).

Los siguientes programas ilustran el funcionamiento de la función.

1. std::vector::get_allocator() Devuelve una copia del objeto asignador asociado con el vector .

// C++ program to show working 
// of get_allocator function
#include <iostream>
#include <vector>
  
using namespace std;
  
// Function for allocating
char* Allocate(vector<char> arr, int size)
{
  // allocate space for size(s) elements
  return arr.get_allocator().allocate(size); 
}
  
void Construct(vector<char> arr,
                      char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
      
      // construct values in-place on the array:
      arr.get_allocator().construct(&point[iter],
                                      iter + 97); 
}
  
// Function for Deallocating
void deAllocate(vector<char> arr,
                       char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
        arr.get_allocator().destroy(&point[iter]);
      
    // free allocated memory    
    arr.get_allocator().deallocate(point, size); 
}
  
// Driver code
int main()
{
    vector<char> array;
    char* pointer;
    int size = 8;
      
    pointer = Allocate(array, size);
    Construct(array, pointer, size);
  
    cout << "Array elements:  ";
    for (int iter = 0; iter < size; ++iter)
        cout << pointer[iter] << " ";
  
    deAllocate(array, pointer, size);
  
    return 0;
}
Producción:

Array elements:  a b c d e f g h

2. std::list::get_allocator() Devuelve una copia del objeto asignador asociado con la lista .

// C++ program to show working 
// of get_allocator function
#include <iostream>
#include <list>
  
using namespace std;
  
// Function for allocating
char* Allocate(list<char> arr, int size)
{
  // allocate space for size(s) elements
  return arr.get_allocator().allocate(size); 
}
  
void Construct(list<char> arr,
                      char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
      
      // construct values in-place on the array:
      arr.get_allocator().construct(&point[iter],
                                      iter + 97); 
}
  
// Function for Deallocating
void deAllocate(list<char> arr,
                       char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
        arr.get_allocator().destroy(&point[iter]);
      
    // free allocated memory    
    arr.get_allocator().deallocate(point, size); 
}
  
// Driver code
int main()
{
    list<char> array;
    char* pointer;
    int size = 8;
      
    pointer = Allocate(array, size);
    Construct(array, pointer, size);
  
    cout << "Array elements:  ";
    for (int iter = 0; iter < size; ++iter)
        cout << pointer[iter] << " ";
  
    deAllocate(array, pointer, size);
  
    return 0;
}
Producción:

Array elements:  a b c d e f g h

3. std::set::get_allocator() Devuelve una copia del objeto asignador asociado con el conjunto .

// C++ program to show working 
// of get_allocator function
#include <iostream>
#include <set>
  
using namespace std;
  
// Function for allocating
char* Allocate(set<char> arr, int size)
{
  // allocate space for size(s) elements
  return arr.get_allocator().allocate(size); 
}
  
void Construct(set<char> arr,
                      char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
      
      // construct values in-place on the array:
      arr.get_allocator().construct(&point[iter],
                                      iter + 97); 
}
  
// Function for Deallocating
void deAllocate(set<char> arr,
                       char* point, int size)
{
    for (int iter = 0; iter < size; ++iter)
        arr.get_allocator().destroy(&point[iter]);
      
    // free allocated memory    
    arr.get_allocator().deallocate(point, size); 
}
  
// Driver code
int main()
{
    set<char> array;
    char* pointer;
    int size = 8;
      
    pointer = Allocate(array, size);
    Construct(array, pointer, size);
  
    cout << "Array elements:  ";
    for (int iter = 0; iter < size; ++iter)
        cout << pointer[iter] << " ";
  
    deAllocate(array, pointer, size);
  
    return 0;
}
Producción:

Array elements:  a b c d e f g h

Referencias: http://www.cplusplus.com/reference/vector/vector/get_allocator/

Publicación traducida automáticamente

Artículo escrito por Dibyendu Roy Chaudhuri 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 *