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 
廣告