C++ 栈
在计算机科学中,我们经常处理各种各样的程序。每个程序都有自己的领域和用途。根据程序创建的目的和环境,我们有很多可供选择的数据结构。其中之一就是 ‘stack’(栈)。在讨论这种数据类型之前,让我们先看一下它的语法。
语法
template<class T, class Container = deque<T> > class stack;
这种数据结构采用了LIFO技术,其中LIFO代表后进先出。最先插入的元素将在最后被提取,依此类推。有一个叫做“top”的元素,它是位于最上方的元素。所有的插入和删除操作都在栈中的顶部元素上进行。
应用领域中的栈被表示为容器适配器。
容器应该对以下操作列表提供支持:
- empty(判断是否为空)
- size(返回元素个数)
- back(返回最后一个元素)
- push_back(在末尾插入元素)
- pop_back(删除最后一个元素)
模板参数
T :该参数指定容器适配器将保存的元素类型。
Container :该参数指定了一个内部容器对象,其中存放着栈的元素。
成员类型
下面给出了栈的成员类型列表及其简短描述。
成员类型 | 描述 |
---|---|
value_type | 指定元素类型。 |
container_type | 指定底层容器类型。 |
size_type | 指定元素的大小范围。 |
函数
在编程领域中,通过函数可以操作对象或变量。栈提供了许多可以在程序中使用或嵌入的函数。以下是一些函数列表:
功能 | 描述 |
---|---|
(构造函数) | 该函数用于构建堆栈容器。 |
empty | 该函数用于测试堆栈是否为空。如果堆栈为空,函数返回true,否则返回false。 |
size | 该函数返回堆栈容器的大小,即存储在堆栈中的元素数量。 |
top | 该函数用于访问堆栈的顶部元素。该元素在插入和删除操作中起着非常重要的作用,所有的插入和删除操作都在顶部元素上进行。 |
push | 该函数用于在堆栈的顶部插入一个新元素。 |
pop | 该函数用于删除元素,从堆栈中删除顶部的元素。 |
emplace | 该函数用于在堆栈中当前顶部元素的上方插入新元素。 |
swap | 该函数用于交换两个容器的内容。 |
关系运算符 | 这个非成员函数指定了堆栈所需的关系运算符。 |
using allocator<stack> |
正如名称所示,这个非成员函数使用了堆栈的allocator。 |
示例:一个简单的程序展示了基本栈函数的使用。
#include <iostream>
#include <stack>
using namespace std;
void newstack(stack <int> ss)
{
stack <int> sg = ss;
while (!sg.empty())
{
cout << '\t' << sg.top();
sg.pop();
}
cout << '\n';
}
int main ()
{
stack <int> newst;
newst.push(55);
newst.push(44);
newst.push(33);
newst.push(22);
newst.push(11);
cout << "The stack newst is : ";
newstack(newst);
cout << "\n newst.size() : " << newst.size();
cout << "\n newst.top() : " << newst.top();
cout << "\n newst.pop() : ";
newst.pop();
newstack(newst);
return 0;
}
输出:
The stack newst is : 11 22 33 44 55
newst.size() : 5
newst.top() : 11
newst.pop() : 22 33 44 55