C++ scoped_allocator::outer_allocator() Function



The std::scoped_allocator::outer_allocator() function in C++, is used to access the outermost allocator in a nested scoped_allocator_adaptor. The scoped_allocator_adaptor is designed to handle the memory allocations for nested containers, ensuring that all the elements share the same allocator.

This functions returns the reference to the outermost allocator, which is responsible for managing memory at higher level. It is used when working with the nested containers where each level may require different allocation strategies.

Syntax

Following is the syntax for std::scoped_allocator::outer_allocator() function.

outer_allocator_type& outer_allocator() noexcept;
or
const outer_allocator_type& outer_allocator() const noexcept;

Parameters

This function does not accepts any parameters.

Return Value

This function returns a reference to the outer allocator.

Example 1

Let's look at the following example, where we are going to use the scoped allocator to handle the inner and outer allocator, then we used the outer_allocator() to allocate memory for the outer container.

#include <iostream>
#include <vector>
#include <memory>
#include <scoped_allocator>
int main() {
   std::vector < int > x = {11,12,23};
   std::vector < std::vector < int >> y;
   std::scoped_allocator_adaptor < std::allocator < std::vector < int >>> z;
   auto outer_allocator = z.outer_allocator();
   y.push_back(x);
   std::cout << "Result : " << y.size() << std::endl;
   return 0;
}

Output

Output of the above code is as follows −

Result : 1

Example 2

Consider the following example, where we are going to use the outer_allocator() to allocate memory for a nested container.

#include <iostream>
#include <vector>
#include <memory>
#include <scoped_allocator>
int main() {
   std::vector < int > x = {121,232};
   std::vector < std::vector < int >> y;
   std::scoped_allocator_adaptor < std::allocator < std::vector < int >>> z;
   auto outer_allocator = z.outer_allocator();
   y.push_back(x);
   std::cout << "Outer vector size: " << y.size() << std::endl;
   std::cout << "Inner vector size: " << y[0].size() << std::endl;
   return 0;
}

Output

Output of the above code is as follows −

Outer vector size: 1
Inner vector size: 2
cpp_scoped_allocator.htm
Advertisements