FILO:First In Last Out(先进后出)
栈是适配器
1.构造
stack构造不能直接使用初始化列表 std::initializer_list,可以使用其他容器初始化stack,使用std::deque
不需要指定容器,使用其他容器(例如:std::vector
)需要指定容器。
std::deque<int> myDeque(3, 5);
std::vector<int> myVector(2, 4);
std::list<int> myList(3, 3);
//std::stack<int> s1{ 1,2,3 }; //error
std::stack<int> s2(myDeque); //s2 = 5,5,5
//std::stack<int> s3(myList); //error
std::stack<int, std::list<int>> s4(myList); //s4 = 3,3,3
//std::stack<int> s5(myVector);//error
std::stack<int, std::vector<int>> s6(myVector); //s6 = 4,4
2.访问栈顶元素(只能访问栈顶元素)
auto ret = myStack.top() //top()返回栈顶元素
如果访问的栈为空,则会中断,因此使用top()
前一定要保证该栈不为空
3.添加
std::stack<int> s7;
s7.emplace(2); //在栈顶插入一个元素2
s7.push(5); //在栈顶插入一个元素5
4.删除
myStack.pop(); //删除栈顶元素
如果删除的栈为空,则会中断,因此使用pop()
之前要保证该栈不为空
5.其他
- 返回栈的大小
size()
- 栈是否为空
empty()
- 两个栈互相交换
必须是两个类型相同的栈才能交换,用std::vector初始化的stack不能和std::deque初始化的stack交换
swap(stack& other)
完整示例代码
#include <stack>
#include <vector>
#include <deque>
#include <list>
int main()
{
std::deque<int> myDeque(3, 5);
std::vector<int> myVector(2, 4);
std::list<int> myList(3, 3);
//std::stack<int> s1{ 1,2,3 }; //error
std::stack<int> s2(myDeque); //s2 = 5,5,5
//std::stack<int> s3(myList); //error
std::stack<int, std::list<int>> s4(myList); //s4 = 3,3,3
//std::stack<int> s5(myVector);//error
std::stack<int, std::vector<int>> s6(myVector); //s6 = 4,4
std::stack<int> s7;
s7.emplace(2); //在栈顶插入一个元素2
s7.push(5); //在栈顶插入一个元素5
s7.pop();
bool IsEmpty = s7.empty(); //false
size_t Size = s7.size(); //1
s2.swap(s7);
//s6.swap(s4); //error
return 0;
}