六一的部落格


关关难过关关过,前路漫漫亦灿灿。



后进先出

默认使用deque作为底层容器


头文件

1#include <stack>

栈支持的底层容器

顺序容器
array X
vector/string O
deque O
list O
forward_list X

栈操作与对底层容器的要求

底层实现
pop 出栈; 要求栈不为空 pop_back
push 入栈 push_back
emplace 入栈 emplace_back
top 获取栈顶元素 back
1s.pop();             // 删除栈顶元素,不返回元素值
2
3s.push(item);        // 构造item的拷贝,压入栈
4
5s.emplace(args);     // 使用args构造元素,压入栈
6
7s.top();             // 返回栈顶元素,不弹出

初始化栈, 并设置底层容器

1stack<string, vector<string>> str_stk;
2// 底层容器类型由deque改为vector
3
4stack<string, vector<string>> str_stk2(svec);
5// 此时可以用vector<string>来初始化

示例

 1stack<int> intStack;
 2
 3for (size_t ix = 0; ix != 10; ++ix)
 4    intStack.push(ix);
 5// 相当于调用deque的push_back
 6
 7while (!intStack.empty())
 8{
 9    int value = intStack.top();
10    intStack.pop();
11}

顺序容器适配器: 栈


后进先出

默认使用deque作为底层容器


头文件

1#include <stack>

栈支持的底层容器

顺序容器
array X
vector/string O
deque O
list O
forward_list X

栈操作与对底层容器的要求

底层实现
pop 出栈; 要求栈不为空 pop_back
push 入栈 push_back
emplace 入栈 emplace_back
top 获取栈顶元素 back
1s.pop();             // 删除栈顶元素,不返回元素值
2
3s.push(item);        // 构造item的拷贝,压入栈
4
5s.emplace(args);     // 使用args构造元素,压入栈
6
7s.top();             // 返回栈顶元素,不弹出

初始化栈, 并设置底层容器

1stack<string, vector<string>> str_stk;
2// 底层容器类型由deque改为vector
3
4stack<string, vector<string>> str_stk2(svec);
5// 此时可以用vector<string>来初始化

示例

 1stack<int> intStack;
 2
 3for (size_t ix = 0; ix != 10; ++ix)
 4    intStack.push(ix);
 5// 相当于调用deque的push_back
 6
 7while (!intStack.empty())
 8{
 9    int value = intStack.top();
10    intStack.pop();
11}