allocator类

来源:互联网 发布:断鸿零雁记 知乎 编辑:程序博客网 时间:2024/06/15 22:51

allocator是一个模板。为了定义这个allocator对象,我们必须指明这个allocator可以分配的对象类型。
allocatoralloc;

allocator分配的内存是未构造的。

allocator<string >alloc;            //可以分配string的allocator对象auto const p=alloc.allocate(n);     //分配n个未初始化的stringauto q=p;alloc.constructor(q++);                  //*q为空字符串alloc.constructor(q++,10,'c');          //*q为ccccccalloc.constructor(q++,'hi');            //*q为hi

为了使用allocate返回的内存,我们必须使用constructor构造对象。使用未构造的内存,其行为是未定义的。

拷贝和填充未初始化内存的算法

unintialized_copy(b,e,b2)从迭代器b和e指出的输入范围中拷贝元素到迭代器b2指定的未构造的原始内存中。b2指向的内存必须足够大,能容纳元素的拷贝unintialized_copy_n(b,n,b2)从迭代器b指向的元素开始,拷贝n个元素到b2开始的内存中。unintialized_fill(b,e,t)从迭代器b和e指出的原始内存范围中创建对象,对象值均为t的拷贝。unintialized_fill_n(b,n,t)从迭代器b指向的内存地址开始创建n个对象。b必须指向足够大的未构造的原始内存,能容纳给定数量的对象

//vector<int> v1;//分配比v1元素中所占用空间大一倍的动态内存auto p=alloc.allocate(v1.size()*2);//拷贝v1中元素来构造p开始的元素auto p=uninitialized_copy(v1.begin(),v1.end(),p);//将剩余元素初始化为42uninitialized_fill_n( q,vi.size(),42);

unintialized_copy调用会返回一个指针,指向最后一个构造的元素之后的位置。

原创粉丝点击