【发布时间】:2023-03-09 08:05:01
【问题描述】:
【问题讨论】:
-
您提供的链接中对
stack适配器的描述中的什么引起了混淆?关于该适配器can be found here 的替代文档,我强烈建议您为该站点添加书签。它作为 C++ 参考非常出色,是最好的恕我直言之一。
标签: c++ stl stack implementation
【问题讨论】:
stack 适配器的描述中的什么引起了混淆?关于该适配器can be found here 的替代文档,我强烈建议您为该站点添加书签。它作为 C++ 参考非常出色,是最好的恕我直言之一。
标签: c++ stl stack implementation
std::stack有一个模板参数Container,要求是可以存储T类型元素的容器(也就是栈元素的类型)。这个容器需要有back()、push_back()和pop_back()函数,标准容器vector、deque和list都满足要求。
因此,无论用户指定哪种容器类型,std::stack 的最终实例化都是一个类:
Container<T> 类型的数据成员(或者非常相似的东西,如果不是字面上的数据成员。我想它可能是一个私有基类)。push() 时,都会在容器上调用 push_back()。pop() 时,都会在容器上调用pop_back()。简单地说,std::stack<T> 是一个封装了std::deque<T> 实例的对象,并隐藏了deque 的大部分功能,以便提供一个更简单的界面仅用作后进先出 (LIFO) 队列。类似地,std::queue 提供了一个 FIFO 队列。
【讨论】:
stack是一个适配器,它使用另一个容器进行底层存储,并将push、pop、emplace等函数链接到底层容器中的相关函数。
默认情况下,std::stack 使用 std::deque 作为底层容器。但是您可以指定自己的,例如std::stack<T, std::vector<T>> s;.
有关此的更多详细信息,请参阅cppreference。
【讨论】: