C ++ set get_allocator()函数用于返回分配器对象的副本,该对象有助于构造set容器。
allocator_type get_allocator() const; //C++ 11 之前 allocator_type get_allocator() const noexcept; //C++ 11 之后
没有
返回与集合容器关联的分配器。
不变。
没有变化。
容器被访问。
同时访问set的元素是安全的。
此函数从不抛出异常。
让我们看一个简单的实例:
#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; }
输出:
分配的大小 = 32
让我们看一个简单的实例:
#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 << "已分配的数组包含:"; for (i=0; i<5; i++) cout << ' ' << p[i]; cout << '\n'; myset.get_allocator().deallocate(p,5); return 0; }
输出:
已分配的数组包含: 10 20 30 40 50
让我们看一个简单的示例,检查分配器是否可互换:
#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; //以下行声明对象 //使用默认分配器。 set<int> s1; set<int>::allocator_type s2; set<double>::allocator_type s3; s1_Alloc = s1.get_allocator(); cout << "可以分配的整数数量" << endl << "在空闲内存耗尽之前: " << s2.max_size() << "." << endl; cout << "\n可以分配的双浮点数" << endl << "在空闲内存耗尽之前: " << s3.max_size() << "." << endl; //以下行创建一个集合s4 //使用多重集合s1的分配器。 set <int> s4(less<int>(), s1_Alloc); s4_Alloc = s4.get_allocator(); //如果两个分配器可以互换 //每个分配的存储空间可以是 //被另一个释放 if (s1_Alloc == s4_Alloc) { cout << "\n这些分配器是可互换的。"<< endl; } else { cout << "\n这些分配器是不可互换的。"<< endl; } return 0; }
输出:
可以分配的整数数量 在空闲内存耗尽之前: 1073741823. 可以分配的双浮点数 在空闲内存耗尽之前: 536870911. 这些分配器是可互换的。
让我们看一个简单的实例:
#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 ); }
输出:
42, 43