当我尝试使用 vector ,列表之类的顺序容器时,它将第二个默认参数显示为:
typename _Ax = allocator <_Ty> >
我很想知道为什么在其他顺序容器中却不在队列中需要它。这的确切目的是什么。
最好的祝福
最佳答案
std::queue
(例如std::priority_queue
和std::stack
)是容器适配器,而不是容器。它需要的模板参数之一是一个容器:
template<
class T,
class Container = std::deque<T>
> class queue;
队列在内部使用该容器-基本上是容器的包装,提供了类似队列的接口(interface)。
容器(默认情况下为
std::deque
)当然具有分配器参数,并且由于队列只是包装器,因此显然使用了与容器相同的分配器。因此,队列的分配器参数隐含在其容器参数中。分配器参数的目的是使用户能够定义针对当前使用案例进行优化的内存分配/重新分配方法(有时,以及构造/销毁方法)。无论何时需要分配和释放,标准分配器都会执行
malloc
和free
(或等效的代码),这在某些情况下是不希望的。将定制的分配器(例如Boost pool allocator)传递给它可以提高效率,或者在其他方面很有用。关于c++ - 分配器作为 vector 和列表中的默认参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17363884/