当我尝试使用 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/