C++教程-C++栈
C++栈
在计算机科学中,我们处理各种各样的程序。每个程序都有自己的领域和用途。根据程序创建的目的和环境,我们可以选择许多不同的数据结构。其中之一就是“栈”。在讨论这种数据类型之前,让我们先看一下它的语法。
语法
template<class T, class Container = deque<T> > class stack;
这种数据结构基于后进先出(LIFO)的原则。最先插入的元素将在最后被提取,以此类推。有一个称为“top”的元素,它是最上面的元素。在栈中,所有的插入和删除操作都是在顶部元素上进行的。
栈在应用领域中被作为容器适配器使用。
容器应支持以下操作列表: Advertisement
- empty:判断栈是否为空。
- size:返回栈中元素的数量。
- back:返回栈顶元素的引用。
- push_back:将元素插入栈顶。
- pop_back:删除栈顶的元素。
模板参数
T:该参数指定容器适配器所保存的元素类型。
Container:该参数指定一个内部容器对象,用于保存栈中的元素。
成员类型
以下是栈的成员类型及其简要描述。
成员类型 | 描述 |
---|---|
value_type | 指定元素类型。 |
container_type | 指定底层容器类型。 |
size_type | 指定元素的大小范围。 |
函数
函数可以帮助我们在编程领域中操作对象或变量。栈提供了许多可以在程序中使用或嵌入的函数。下面是一些常用的函数列表:
函数 | 描述 |
---|---|
(构造函数) | 用于构造栈容器。 |
empty | 用于检查栈是否为空。如果栈为空,返回true;否则返回false。 |
size | 返回栈容器的大小,即栈中存储的元素数量。 |
top | 用于访问栈顶元素。栈顶元素在操作中起着非常重要的作用,因为所有的插入和删除操作都是在栈顶元素上进行的。 |
push | 用于在栈顶插入新元素。 |
pop | 用于删除栈顶元素,即从栈中删除元素。 |
emplace | 用于在当前栈顶元素之上插入新元素。 |
swap | 用于交换两个容器的内容。 关系运算符:非成员函数,用于栈的比较运算。 |
uses allocator<stack> | 非成员函数,使用分配器来管理栈的内存。 |
示例:一个简单的程序展示了基本栈函数的使用。
#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