Stack在STL中是如何实现的?
How is Stack implemented in STL?
我遇到了这个:
这引发了我的疑问,堆栈在 STL 中是如何实现的?
我正在寻找类似于以下内容的描述:
How is C++ std::vector implemented?
What really is a deque in STL?
std::stack
有一个模板参数Container
,要求是一个容器,可以存放T
类型的元素(即元素的类型堆栈)。要求此容器具有back()
、push_back()
和pop_back()
功能,标准容器vector
、deque
和list
均满足要求.
因此,无论用户指定哪种容器类型,std::stack
的实例化结果都是 class,其中:
- 有一个
Container<T>
类型的数据成员(或者非常相似的东西,如果不是字面上的数据成员的话。我想它可能是一个私有基础 class)。
- 每当您在堆栈上调用
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。
我遇到了这个:
这引发了我的疑问,堆栈在 STL 中是如何实现的?
我正在寻找类似于以下内容的描述:
How is C++ std::vector implemented?
What really is a deque in STL?
std::stack
有一个模板参数Container
,要求是一个容器,可以存放T
类型的元素(即元素的类型堆栈)。要求此容器具有back()
、push_back()
和pop_back()
功能,标准容器vector
、deque
和list
均满足要求.
因此,无论用户指定哪种容器类型,std::stack
的实例化结果都是 class,其中:
- 有一个
Container<T>
类型的数据成员(或者非常相似的东西,如果不是字面上的数据成员的话。我想它可能是一个私有基础 class)。 - 每当您在堆栈上调用
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。