当我尝试使用向量、列表等顺序容器时,它显示第二个默认参数为,
typename _Ax = allocator <_Ty> >
我很想知道为什么在其他顺序容器中需要它而不是在队列中。这样做的确切目的是什么。
此致
A std::queue
(like std::priority_queue
and std::stack
) 是一个容器适配器,而不是一个容器。它采用的模板参数之一是容器:
template<
class T,
class Container = std::deque<T>
> class queue;
队列在内部使用该容器——它基本上是容器的包装器,提供类似队列的接口。
容器(std::deque
默认是 a)当然有一个分配器参数,而且由于队列只是一个包装器,它显然使用与容器相同的分配器。所以队列的分配器参数隐含在它的容器参数中。
allocator 参数的目的是使用户能够定义针对当前用例优化的内存分配/释放方法(有时还包括构造/销毁方法)。每当需要分配和释放时,标准分配器基本上都会执行malloc
和free
(或等效的),这在某些情况下可能是不可取的。传递给它一个定制的分配器(例如Boost 池分配器)可能会提高效率,或者是有用的。
分配器处理给定容器的所有内存分配和释放请求,例如std::vector
.
std::queue
不是容器,它是容器适配器,充当底层容器的包装器。所以它不需要分配器,只有底层容器需要一个。
template<class T, class Container = std::deque<T>> class queue;
std::stack
并且std::priority_queue
是其他容器适配器