2

当我尝试使用向量、列表等顺序容器时,它显示第二个默认参数为,

typename _Ax = allocator <_Ty> >

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

此致

4

2 回答 2

5

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

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

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

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

allocator 参数的目的是使用户能够定义针对当前用例优化的内存分配/释放方法(有时还包括构造/销毁方法)。每当需要分配和释放时,标准分配器基本上都会执行mallocfree(或等效的),这在某些情况下可能是不可取的。传递给它一个定制的分配器(例如Boost 池分配器)可能会提高效率,或者是有用的。

于 2013-06-28T11:48:42.340 回答
3

分配器处理给定容器的所有内存分配和释放请求,例如std::vector.

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

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

std::stack并且std::priority_queue是其他容器适配器

于 2013-06-28T11:56:35.567 回答