C++ vector::get_allocator() 函数



C++ vector::get_allocator() 函数用于分配内存块。它返回容器相关联的分配器对象的副本。它在 vector、map、list 和 set 库中定义。get_allocator() 函数的时间复杂度为常数。

在 STL 中,容器可以动态更改其大小。分配器是一个负责动态内存分配/释放的对象。除 std::array 外,所有 C++ 标准库容器都具有 allocator<Type> 类型的模板参数,其中 Type 表示容器元素的类型。

语法

以下是 C++ vector::get_allocator() 函数的语法:

allocator_type get_allocator() const noexcept;

参数

它不接受任何参数。

示例 1

让我们考虑以下示例,我们将使用 get_allocator() 函数。

#include <iostream>
#include <vector>
using namespace std;

int main(void) {
   vector<int> v = {1, 2, 3, 4, 5};
   int *p = NULL;
   p = v.get_allocator().allocate(5);
   for (int i = 0; i < 5; ++i)
      p[i] = i + 1;
   for (int i = 0; i < 5; ++i)
      cout << p[i] << endl;
   return 0;
}

输出

当我们编译并运行上述程序时,将产生以下结果:

1
2
3
4
5

示例 2

考虑另一种情况,我们将返回 vector 教程中使用的相同分配器对象的副本。

#include <iostream>
#include <vector>
using namespace std;

int main (){
   vector<int> tutorial;
   int *x;
   x = tutorial.get_allocator().allocate(6);
   for(int i=0; i<6; i++)
      tutorial.get_allocator().construct(&x[i], 2*(i+1));
   cout<<"The allocated array elements: ";
   for(int i=0; i<6; i++)
      cout<<x[i]<<" ";
   for(int i=0; i<6; i++)
      tutorial.get_allocator().destroy(&x[i]); 
      tutorial.get_allocator().deallocate(x,6);
   return 0;
}

输出

运行上述程序后,将产生以下结果:

The allocated array elements: 2 4 6 8 10 12 
广告