allocator作为vector和list中的默认参数

Pra*_*ari 2 c++ stl

当我尝试使用像vector,list这样的顺序容器时,它会显示第二个默认参数as,

typename _Ax = allocator <_Ty> >
Run Code Online (Sandbox Code Playgroud)

我很想知道为什么在其他顺序容器中需要它但不在队列中.这个的确切目的是什么.

最好的祝福

jog*_*pan 5

A std::queue(和std::priority_queueand std::stack)是容器适配器,而不是容器.它采用的模板参数之一是容器:

template<
     class T,
     class Container = std::deque<T>
  > class queue;
Run Code Online (Sandbox Code Playgroud)

队列在内部使用该容器 - 它基本上是容器的包装器,提供类似队列的接口.

容器(std::deque默认情况下是一个)当然有一个allocator参数,因为队列只是一个包装器,它显然使用与容器相同的分配器.因此队列的allocator参数隐含在其容器参数中.

allocator参数的目的是使用户能够定义针对手头用例优化的内存分配/释放方法(以及有时,构造/销毁方法).每当需要分配和释放时,标准分配器将基本上执行mallocfree(或等效),这在某些情况下可能是不合需要的.传递一个定制的分配器(例如Boost池分配器)可以提高效率,或者在其他方面有用.

  • 分配器也用于构造/销毁元素,因此可用于定制(例如"uses-allocator construction"和"scoped_allocator_adaptor")以及控制内存分配. (2认同)