当我尝试使用像vector,list这样的顺序容器时,它会将第二个默认参数显示为
typename _Ax = allocator <_Ty> >
我很想知道为什么在其他顺序容器中需要它但不在队列中。这是什么目的。
最好的问候
答案 0 :(得分:5)
std::queue
(如std::priority_queue
和std::stack
)是容器适配器,而不是容器。它采用的模板参数之一是容器:
template<
class T,
class Container = std::deque<T>
> class queue;
队列在内部使用该容器 - 它基本上是容器的包装器,提供类似队列的接口。
容器(默认为std::deque
)当然有一个allocator参数,因为队列只是一个包装器,它显然使用与容器相同的分配器。所以队列的allocator参数隐含在容器参数中。
allocator参数的目的是使用户能够定义内存分配/释放的方法(以及有时,构造/销毁的方法),这些方法针对用例进行了优化手。每当需要分配和释放时,标准分配器基本上将执行malloc
和free
(或等效的东西),这在某些情况下可能是不合需要的。将自定义分配器(例如Boost pool allocator)传递给它可以提高效率,或者在其他方面有用。
答案 1 :(得分:3)
分配器处理给定容器(如std::vector
)的内存分配和释放的所有请求。
std::queue
不是容器,它是容器适配器,充当底层容器的包装器。所以它不需要分配器,只有底层容器需要一个。
template<class T, class Container = std::deque<T>> class queue;
std::stack
和std::priority_queue
是其他容器适配器