Open In App

get_allocator() in C++

Last Updated : 01 Jun, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

In STL, containers can change size dynamically. Allocator is an object that is responsible for dynamic memory allocation/deallocation. get_allocator() is used to allocate memory chunks of memory. It returns a copy of the allocator object associated with the container. It is defined in vector, map, list, set libraries.
Syntax:

allocator_type get_allocator() const;

Parameter Used:  
This member function does not need any parameter to be passed.

Return Type: 
It returns a copy of the allocator object associated with the vector.

Errors and Exceptions:
Never throws exceptions so we don’t need any try-catch surrounding of it.

Time-Complexity: 
Constant O(1).

Below programs illustrate the working of the function

1. std::vector::get_allocator() It returns a copy of the allocator object associated with the 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;
}


Output:

Array elements:  a b c d e f g h

2. std::list::get_allocator() It returns a copy of the allocator object associated with the list.




// 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;
}


Output:

Array elements:  a b c d e f g h

3. std::set::get_allocator() It returns a copy of the allocator object associated with the set.




// 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;
}


Output:

Array elements:  a b c d e f g h

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads