STL之stack用法
概述
- STL提供3种容器适配器:stack、queue、priority_queue。容器适配器不是第一类容器,因为它们不提供存放数据的实际数据结构的实现方法。而且容器适配器不支持迭代器。容器适配器的好处:程序员可以选择相应的基础数据结构。
- stack类可以用任何顺序容器vector、list、deque实现。默认情况下,stack用deque实现。
- stack的每个常见操作都实现为内联函数,调用基础容器的相应函数,这样可以避免二次函数调用的开销。
- 为了达到最佳性能,用deque或vector作为stack的基础容器。
具体用法
0. 头文件
#include<stack>
1. 声明和初始化
//声明stack,默认以deque容器实现
stack<int> deque_stack;
//声明stack,以vector容器实现
stack<int,vector<int>> vector_stack;
//声明stack,以list容器实现
stack<int,list<int>> list_stack;
//声明一个int类型的stack2,将stack1的元素复制给stack2
stack<int>stack2=stack1;
或 stack<int> stack2(stack1);
2. 常用函数(查询)
2.1 empty()
stack1.empty(); //返回值bool类型,若stack1为空,则返回true
2.2 size()
stack1.size(); //返回值为int类型,stack1当前存放的元素的个数
2.3 top()
条件是stack不为空
stack1.top(); //返回栈顶元素
2.4 输出
//设置一个输出函数
void display_stack(stack<int> nums) {
while (!nums.empty()) {
cout<<nums.top() <<" ";
nums.pop();
}
cout << endl;
}
3. 常用函数(操作)
3.1 push()
//在stack1的栈顶放入元素2
stack1.push(2)
3.2 emplace()
push()函数和emplace()都是在栈这个容器的顶部插入一个新的元素。
- push() 实际上是调用的底层容器的push_back()函数,新元素的值是push函数参数的一个拷贝。
- emplace() 实际上是调用的底层容器的emplace_back()函数,新元素的值是在容器内部就地构造的,不需要移动或者拷贝。
//在stack1的栈顶放入元素2
stack1.emplace(2);
3.3 pop()
//删除stack1栈顶元素
stack1.pop()
3.4 swap()
//将stack1和stack2交换
stack1.swap(stack2);