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

时间:2013-06-28 11:39:51

标签: c++ stl

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

typename _Ax = allocator <_Ty> >

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

最好的问候

2 个答案:

答案 0 :(得分:5)

std::queue(如std::priority_queuestd::stack)是容器适配器,而不是容器。它采用的模板参数之一是容器:

template<
     class T,
     class Container = std::deque<T>
  > class queue;

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

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

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

答案 1 :(得分:3)

分配器处理给定容器(如std::vector)的内存分配和释放的所有请求。

std::queue不是容器,它是容器适配器,充当底层容器的包装器。所以它不需要分配器,只有底层容器需要一个。

template<class T, class Container = std::deque<T>> class queue;

std::stackstd::priority_queue是其他容器适配器