在 C++ 中,std::stack 和 std::queue 是容器适配器,它们提供了特定的接口,依赖于某个容器类(如 std::deque 或 std::list)来处理元素1。
std::stack:std::stack 默认使用 std::deque 作为其底层容器2。但是,你也可以在创建 std::stack 对象时指定其他的底层容器,只要这个容器支持 back、push_back 和 pop_back 操作。因此,除了 std::deque,std::vector 和 std::list 也可以作为 std::stack 的底层容器1。
std::queue:std::queue 默认使用 std::deque 作为其底层容器2。但是,你也可以在创建 std::queue 对象时指定其他的底层容器,只要这个容器支持 front、back、push_back 和 pop_front 操作。因此,除了 std::deque,std::list 也可以作为 std::queue 的底层容器1。
需要注意的是,std::vector 不能作为 std::queue 的底层容器,因为 std::vector 不支持 pop_front 操作1
在 C++ 的 STL(标准模板库)中,以下容器提供了随机存取:
std::vector:vector 是一个动态数组,能够根据需要增长以容纳其元素4。它允许通过 operator[] 进行随机访问1。
std::array:array 是一个固定大小的数组,支持随机访问2。
std::deque:deque(双端队列)是一个可以在两端进行插入和删除操作的序列容器,同时也支持随机访问2。
这些容器都提供了 operator[] 和 at() 成员函数
题外话
通过改造可以将vector作为queue 的底层容器,但是queue支持pop_front操作,vector执行pop_front操作需要将begin之后的所有元素都向前移动,这是得不偿失的,效率极低。