std::vector
是容器,而 std::stack
是容器适配器。
std::stack
只提供和堆栈相关的接口,其中主要是 push()
、emplace()
、pop()
、top()
和empty()
。使用 std::stack
时只需关心这些接口,而非内在用了哪个具体容器。改变容器类型也不需要修改调用方的代码。这个设计应该可说是乎合 SOLID 中的 I ──接口隔离原则(interface segregation principle)。
std::stack
可适配的标准容器有 std::vector
、std::list
、std::deque
,而 std::deque
是缺省的,因为它提供 的push_back()
,而 std::vector::push_back()
是均摊(amortized) 。
为什么我想不出这种面试题⋯⋯