目录
1.包含头文件<stack>
#include<stack>
2.stack的创建与初始化
- stack<T[, Container=deque<T>]> st:创建一个存储类型 T 的空栈,默认以 deque<T> 组织,也可以指定其他容器
- stack<T, container<T>> st (con):创建一个 stack,用一个 Container<T>的实例初始化这个 stack
注:除了使用拷贝函数外,无法使用初始化列表来初始化 stack,即都使用 ( ),拷贝函数可以用 { }
第一条中所选容器必须支持 back()、push_back()、pop_back()、empty()、size() 才可以
第二条中用于初始化的容器实例必须与所选容器类型一致;使用拷贝函数时,类型和底层容器都必须一致
#include<iostream>
#include<stack>
#include<queue>
#include<list>
#include<string>
#include<stdio.h>
using namespace std;
int main()
{
deque<string> values {"123", "345", "567"};
stack<string> stack1 (values); // 用与底层组织类型一样的容器来初始化
cout << stack1.top() << endl; // 567
cout << stack1.size() << endl; // 3
stack<string> stack2 (stack1); // 用一个相同类型的 stack 来创建
// 同 stack<string> stack2 {stack1};
cout << stack2.top() << endl; // 567
cout << stack2.size() << endl; // 3
list<string> lvalues {"abc", "cde", "efg"};
stack<string, list<string>> stack3 (lvalues);
cout << stack3.top() << endl; // efg
cout << stack3.size() << endl; // 3
// stack<string> stack4 (lvalues);
// 报错, 底层容器不一样, stack4 是 deque<string>; lvalues 是 list<string>
return 0;
}
3.stack的基本操作
- top():返回一个栈顶元素的引用,类型为 T&;栈空,则返回值未定义,可能会报错(或不正常结束)
- push():将元素入栈
- pop():元素出栈,无返回值
- size():返回栈中元素数目
- empty():返回栈是否为空,类型为 bool
- emplace():在栈顶生成元素,相当于 push()
- swap():将栈与参数中的栈的元素互换;两个栈的 T 要一致
stack的基本操作,图片转载自:C++ stack(STL stack)用法详解
stack<T>容器适配器中的数据以LIFO的方式组织
#include<iostream>
#include<stack>
#include<queue>
#include<list>
#include<string>
#include<stdio.h>
using namespace std;
void showStack(const stack<int> & st)
{
cout << "size: " << st.size() << endl; // 输出栈的大小
cout << "top: " << st.top() << endl; // 输出栈顶元素
cout << "empty: " << (st.empty() ? "true" : "false") << endl; // 是否是空栈
}
int main()
{
stack<int> stack1;
// showStack(stack1);
/*size: 0
*top: (运行到这里会报错)
*empty: true
*/
stack1.push(7); // 把 7 入栈
showStack(stack1);
/*size: 1
*top: 7
*empty: false
*/
stack1.emplace(3); // 把 3 入栈
showStack(stack1);
/*size: 2
*top: 3
*empty: false
*/
stack<int> stack2 (stack1); // 拷贝 stack1
stack2.pop(); // 出栈
showStack(stack2);
/*size: 1
*top: 7
*empty: false
*/
stack1.swap(stack2); // 交换 stack1 和 stack2 的元素
showStack(stack1);
/*size: 1
*top: 7
*empty: false
*/
showStack(stack2);
/*size: 2
*top: 3
*empty: false
*/
return 0;
}