Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。
使用STL的stack需要include一个头文件<stack>
常见用法:
- push()会将一个元素放入stack中。(遵从先进后出)
- top()会返回stack中的栈顶元素,返回的是reference,可以就地修改值。(弹出最后一个进入的元素)
- pop()移除栈顶元素,无返回值。
- size()返回stack长度。
- empty()返回stack是否为空。
直接看例子
#include <iostream>
#include <stack>
using namespace std;
int main ()
{
stack<int> mystack;
for (int i=0; i<5; ++i)
mystack.push(i); //push函数将参数元素加入栈中,没有返回值(例如这里循环将0,1,2,3,4加入栈中,注意栈顶元素是4)
cout << "size: " << mystack.size() << endl; //size函数返回栈的大小(此时有5个元素,size=5)
while (!mystack.empty()) //empty函数返回一个bool值,栈为空时返回true,否则返回false
{
cout << ' ' << mystack.top(); //top函数的返回值是栈顶元素(注意并没有删掉栈顶元素)
mystack.pop(); //pop函数将栈顶元素删掉,没有返回值
}
cout << endl;
return 0;
}
还有如:swap(); 等
例子2
#include <iostream>
#include <stack>
using namespace std;
struct Node {
int a,b;
Node (int x, int y) {
a = x; b = y;
}
};
int main ()
{
stack<Node> mystack;
mystack.emplace(1,2); //emplace函数可以将一个元素加入栈中,与push的区别在于:emplace可以直接传入Node的构造函数的参数,并将构造的元素加入栈中
//mystack.push(1,2); //编译不通过,要达到上面的效果需要手动构造,例如mystack.push(Node(1,2));
Node p = mystack.top();
cout << p.a << " " << p.b << endl;
stack<Node> my2;
my2.swap(mystack); //swap函数可以交换两个栈的元素
cout << mystack.size() << " " << my2.size() << endl;
return 0;
}