STL 中的 stack 是一种容器适配器,而不是一种容器。容器适配器是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能。之所以称作适配器类,是因为它可以通过适配容器现有的接口来提供不同的功能。
stack容器适配器中的数据是以 LIFO(后进先出) 的方式组织的,通常的操作有入栈(压栈),出栈和栈顶元素。想要读取栈中的某个元素,就是将其之间的所有元素出栈才能完成。
查看栈的原理请看这篇博客,栈的定义和算法的实现
一、c++ stack的成员方法
使用stack需要加如下对应的头文件
#include<stack>
声明一个栈变量:stack<int> c, d;
成员方法 | 功能 | 用法 |
---|---|---|
top() | 返回一个栈顶元素的引用。如果栈为空,返回值未定义。 | c . p o p ( ) ; c.pop(); c.pop(); |
push(val) | 压一个值到栈中,其值将被初始化为 val | c . p u s h ( v a l u e ) ; c.push(value); c.push(value); |
pop() | 弹出栈顶元素。 | c . t o p ( ) ; c.top(); c.top(); |
size() | 返回栈中元素的个数。 | c . s i z e ( ) ; c.size(); c.size(); |
empty() | 在栈中没有元素的情况下返回 true。 | c . e m p t y ( ) ; c.empty(); c.empty(); |
emplace(): | 用传入的参数调用构造函数,在栈顶生成对象。 | c . e m p l a c e ( v a l u e ) ; c.emplace(value); c.emplace(value); |
swap() | swap将两个 stack的内容交换。这两个 stack的模板参数 T和 Container必须都相同。 | c . s w a p ( d ) ; c.swap(d); c.swap(d); |
二、举例代码
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> c; // 创建栈
// 将元素压入栈
for(int i = 0; i< 10; i++)
{
c.push(i);
}
if(!c.empty()) // 判断栈是否为空
cout << "This stack is not empty!" << endl;
cout << "The elements in the stack are:" << c.size() << endl;
while(!c.empty())
{
cout << c.top() << ' ';
c.pop();
}
cout << endl;
if(c.empty())
{
cout << "This stack is empty!" << endl;
}
return 0;
}
输出的结果为: