c++ - 分配器作为 vector 和列表中的默认参数

标签 c++ stl

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

typename _Ax = allocator <_Ty> >

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

最好的问候

最佳答案

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

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

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

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

分配器参数的目的是让用户能够定义内存分配/解除分配的方法(以及,有时,构造/销毁的方法),这些方法针对以下用例进行了优化手。标准分配器基本上会在需要分配和释放时执行 mallocfree(或类似的东西),这在某些情况下可能是不希望的。将自定义分配器(例如 Boost pool allocator)传递给它可能会提高效率,或者在其他方面很有用。

关于c++ - 分配器作为 vector 和列表中的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17363884/

相关文章:

STL - 我可以在 DriverKit 驱动程序中使用 STL 吗?

c++ - 如何从基类容器中提取派生类?

c++ - GDB 如何以两种不同的方式取消对同一个指针的引用?

如果 blitted 到特定表面,则 C++ SDL 冲突

c++ - 如何在 C++17 STL 并行算法中处理调度?

C++如何将 map 迭代器仅公开给 map 的值

c++ - C++中的变量和引用之间有什么区别?

c++ - 在 C++ 结构创建中执行更快

c++ - 为什么 C++ 不使用 C++ 元素/样式重新实现 C 标准函数?

c++ - 迭代器类型的模板