English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base C++

C++ 流程控制

Funzione C++

C++ 数组 & 字符串

C++ 数据结构

C++ 类 & 对象

Puntatore C++

Ereditarietà C++

Corso di base STL C++

C++ 参考手册

C++ set get_allocator() 使用方法及示例

Set (insieme) STL C++

C++ set get_allocator()函数用于返回分配器对象的副本,该对象有助于构造set容器。

语法

           allocator_type get_allocator() const; // C++ 11之前
allocator_type get_allocator() const noexcept; // C++ 11之后

参数

没有

返回值

返回与集合容器关联的分配器。

复杂

不变。

迭代器有效性

没有变化。

数据争用

容器被访问。

同时访问set的元素是安全的。

异常安全

此函数从不抛出异常。

实例1

Vediamo un esempio semplice:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<double> m;   
   double * p;
   p = m.get_allocator().allocate(3);
   // double为8
   cout << "分配的大小 = " << sizeof(*p) * 4 << endl;
   return 0;
}

Output:

分配的大小 = 32

实例2

Vediamo un esempio semplice:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  int * p;
  unsigned int i;
  // 使用myset的分配器分配一个包含5个元素的数组:
  p = myset.get_allocator().allocate(5);
  // 赋值给数组一些值
  for (i=0; i<5; i++) p[i] = (i+1)*10;
  cout << "L'array allocato contiene:";
  for (i=0; i<5; i++) cout << ' ' << p[i];
  cout << '\n';
  myset.get_allocator().deallocate(p,5);
  return 0;
}

Output:

L'array allocato contiene: 10 20 30 40 50

Esempio 3

Vediamo un esempio semplice, per controllare se gli allocatori sono intercambiabili:

#include <set>  
#include <iostream>  
using namespace std;
int main()
{
    
    set<int>::allocator_type s1_Alloc;
    set<int>::allocator_type s2_Alloc;
    set<double>::allocator_type s3_Alloc;
    set<int>::allocator_type s4_Alloc;
    // Le seguenti righe dichiarano gli oggetti
    // Utilizza l'allocatore predefinito.  
    set<int> s1;
    set<int>::allocator_type s2;
    set<double>::allocator_type s3;
    s1_Alloc = s1.get_allocator();
    cout << "Numero di interi che possono essere allocati"
        << endl << "Prima di esaurire la memoria libera: "
        << s2.max_size() << "." << endl;
    cout << "\nQuantità di numeri a virgola mobile che possono essere allocati"
        << endl << "Prima di esaurire la memoria libera: "
        << s3.max_size() << "." << endl;
    // Le seguenti righe creano un set s4
    // Utilizza l'allocatore del set s1.
    set<int> s4(less<int>(), s1_Alloc);
    s4_Alloc = s4.get_allocator();
    // Se due allocatori sono intercambiabili
    // Ogni spazio di memoria allocato può essere
    // Rilasciato da un altro
    if (s1_Alloc == s4_Alloc)
    {
        cout << "\nQuesti allocatori sono intercambiabili." << endl;
    }
    else
    {
        cout << "\nQuesti allocatori non sono intercambiabili." << endl;
    }
   return 0;
}

Output:

Numero di interi che possono essere allocati
Prima di esaurire la memoria libera: 1073741823.
Quantità di numeri a virgola mobile che possono essere allocati
Prima di esaurire la memoria libera: 536870911.
Questi allocatori sono intercambiabili.

Esempio 4

Vediamo un esempio semplice:

#include <iostream>
 #include <set>
using namespace std;
int main() 
{ 
  set<int> c; 
  int * p;
  p = c.get_allocator().allocate(2);
  p[0] = 42; 
  p[1] = 43;
  cout << p[0] << ", " << p[1] << endl;
  c.get_allocator().deallocate(p, 2); 
}

Output:

42, 43

Set (insieme) STL C++