C++ 栈

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程