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