English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C++ set get_allocator()函数用于返回分配器对象的副本,该对象有助于构造set容器。
allocator_type get_allocator() const; // C++ 11之前 allocator_type get_allocator() const noexcept; // C++ 11之后
没有
返回与集合容器关联的分配器。
不变。
没有变化。
容器被访问。
同时访问set的元素是安全的。
此函数从不抛出异常。
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
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
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.
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