stack是堆栈容器,是一种“先进后出”的容器。
如图:
唯有等最后面进来的车子出去后,里面的车子才可以陆陆续续的出来!
stack是基于deque容器而实现的容器。
使用需包含头文件#include <stack>
定义
stack<int> s1; // 默认使用deque存储元素
//stack<int, deque<int>> s1;
// 可以自行修改为其他容器存储元素
stack<int, vector<int>> ss1;
stack<int, list<int>> ss2;
stack<double> s2;
stack<char> s3;
stack<int> s4(s1); // 拷贝构造
s1 = s4; // 赋值重载
// 元素入栈
s1.push(1);
// 元素出栈
s1.pop();
// 返回最后一个入栈的元素
s1.top();
因其返回的是引用,所以可以直接进行赋值:s1.top() = 10; // 可以进行修改
// 判断容器是否为空
s1.empty();
// 获取栈里面的元素个数
s1.size();
// 交换栈中的元素
s1.swap(s4);
注意: stack容器没有迭代器,所以如果想要输出容器里面的值,唯有一下方法:
while (!s1.empty()) { // 如果不为空则继续执行
cout << s1.top() << " "; // 输出最后一个入栈的值
s1.pop(); // 最后一个元素出栈
}
cout << endl;
测试代码:
#include <iostream>
#include <Windows.h>
#include <stack>
#include <vector>
#include <list>
using namespace std;
int main(void) {
stack<int> s1; // 默认使用deque存储元素
//stack<int, deque<int>> s1;
stack<int, vector<int>> ss1;
stack<int, list<int>> ss2;
stack<double> s2;
stack<char> s3;
stack<int> s4(s1); // 拷贝构造
s1 = s4; // 赋值重载
// 元素入栈
s1.push(1);
s1.push(3);
s1.push(5);
// 元素出栈
s1.pop();
// 返回最后一个入栈的元素
s1.top(); // s1.top() = 10; // 可以进行修改
// 判断栈是否为空
if (!s1.empty()) {
// 获取栈里面的元素个数
cout << s1.size() << endl;
}
// 交换栈中的元素
s1.swap(s4);
while (!s1.empty()) { // 如果不为空则继续执行
cout << s1.top() << " "; // 输出最后一个入栈的值
s1.pop(); // 最后一个元素出栈
}
cout << endl;
system("pause");
return 0;
}
STL其他容器学习链接: