c++ STL容器之栈stack
程序员文章站
2024-01-19 17:25:22
...
Stack简介
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。
Stack初始化
stack<int> s;
通过s.push() 为栈赋值,如
s.push(1);
stack常用函数
这里我们着重讲解函数swap():
先看一段代码:
//以下代码用来测试swap()函数的作用
stack<int> s1,s2;
//对栈s1赋值
s1.push(1);
s1.push(2);
s1.push(3);
//对栈s2赋值
s2.push(9);
s2.push(8);
//此时s1内有三个值,s2内有两个值
cout << "swap前s1的大小: " << s1.size() << endl;
print(s1);
cout << "swap前s2的大小: " << s2.size() << endl;
print(s2);
s1.swap(s2);
cout << "swap后s1的大小: " << s1.size() << endl;
print(s1);
cout << "swap后s2的大小: " << s2.size() << endl;
print(s2);
运行结果
由此,我们不难发现,所谓swap函数即是将两个栈对象进行交换,相当于名字互换。
一个介绍栈函数的小程序
#include <iostream>
#include <stack>
using namespace std;
//这里我们抽象一个函数用来打印栈中的值
void print(stack<int> s)
{
while(!s.empty())
{
//s.top()用来返回栈顶的值
cout << s.top() << endl;
//s.pop()用来去除顶部元素
s.pop();
}
}
int main()
{
stack<int> s;
cout << "判断栈是否为空" << s.empty() << endl;
cout << "初始化时栈的大小" << s.size() << endl;
for(int i = 0; i < 10;i ++)
{
s.push(i);
}
cout << "判断栈是否为空" << s.empty() << endl;
cout << "初始化后栈的大小" << s.size() <<endl;
cout << "栈的top指针的值" << s.top() << endl;
//返回栈顶的元素
cout << "栈顶的元素: " << s.top() <<endl;
//遍历栈的元素
while(!s.empty())
{
//s.top()用来返回栈顶的值
cout << "栈顶的值" << s.top() << endl;
//s.pop()用来去除顶部元素
s.pop();
}
cout << "判断栈是否为空" << s.empty() << endl;
cout << "调用pop()后栈的大小" << s.size() <<endl;
//cout << "空栈的top指针的值" << s.top() << endl; //程序走到这一步会崩溃,因为top指针此时没有任何指向
//以下代码用来测试swap()函数的作用
stack<int> s1,s2;
//对栈s1赋值
s1.push(1);
s1.push(2);
s1.push(3);
//对栈s2赋值
s2.push(9);
s2.push(8);
//此时s1内有三个值,s2内有两个值
cout << "swap前s1的大小: " << s1.size() << endl;
print(s1);
cout << "swap前s2的大小: " << s2.size() << endl;
print(s2);
s1.swap(s2);
cout << "swap后s1的大小: " << s1.size() << endl;
print(s1);
cout << "swap后s2的大小: " << s2.size() << endl;
print(s2);
return 0;
}
运行结果
下一篇: HashMap(二)原理讲解