01、目录

02、C++标准模板库——stack介绍

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

C++库以提供“模板”为主。所谓模板,是指不必预先制定类型的函数或类。我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来管理数据。为应对多种需求,STL为用户提供了多种名为容器(Container)的类,用于管理数据集合。在创建动态数组、表、栈、队列等数据结构时,我们只需要定义对应的容器,然后调用相应成员函数或算法即可。

03、stack成员函数表

函数(Function)描述(Description)
size()返回栈中元素数目
push()在栈顶增加元素
pop()移除栈顶元素
top()返回栈顶元素
empty()判断堆栈是否为空,堆栈为空则返回真

04、stack成员函数详解

下面的所有操作均可用于堆栈,相等指堆栈有相同的元素并有着相同的顺序。

  ==
  <=
  >=
  <
  >
  !=
4.1、 push()

Syntax:

//void push( const TYPE &val ); 向栈中插入元素
#include <iostream>
#include <stack> //栈容器头文件
using namespace std;

void test01()
{
	stack<int> s;
	for(int i = 0; i < 10; i++)
	{
		if(i % 2 == 0)
		{
			s.push(i); //插入偶数
		}
	}
}

int main()
{
	test01();

	system("pause");
	return 0;
}

4.2、 pop()

Syntax:

// void pop();  弹出栈顶元素,弹栈或者叫出栈

#include <iostream>
#include <stack> //栈容器头文件
using namespace std;

void test01()
{
	stack<int> s;
	for(int i = 0; i < 10; i++)
	{
		if(i % 2 == 0)
		{
			s.push(i); //插入偶数,入栈
		}
	}

	s.pop(); //出栈,此时栈中只剩下:0,2,4,6
}

int main()
{
	test01();

	system("pause");
	return 0;
}

4.3、 size()

Syntax:

size_type size(); //返当前堆栈中的元素数目。如:

#include <iostream>
#include <stack> //栈容器头文件
using namespace std;

void test01()
{
	stack<int> s;
	for(int i = 0; i < 10; i++)
	{
		if(i % 2 == 0)
		{
			s.push(i); //插入偶数,入栈
		}
	}
	size_t len = s.size(); //此时len为5
	
	s.pop(); //出栈,此时栈中只剩下:0,2,4,6
	
	len = s.size(); //此时len为4
}

int main()
{
	test01();

	system("pause");
	return 0;
}

4.4、 top()

Syntax:

//TYPE &top(); 返回栈顶元素

#include <iostream>
#include <stack> //栈容器头文件
using namespace std;

void test01()
{
	stack<int> s;
	for(int i = 0; i < 10; i++)
	{
		if(i % 2 == 0)
		{
			s.push(i); //插入偶数,入栈
		}
	}
	
	int tmp = s.top(); //返回栈顶元素,并没有弹出栈,只是得到值
	cout << "tmp:" << tmp << endl; //返回 8
	
}

int main()
{
	test01();

	system("pause");
	return 0;
}
4.5、 empty()

Syntax:

//bool empty(); 判断是否栈中为NULL

#include <iostream>
#include <stack> //栈容器头文件
using namespace std;

void test01()
{
	stack<int> s;
	if(s.empty()) {
		cout << "第一次:s中为NULL" << endl;
	}else {
		cout << "第一次:s中不为NULL" << endl;
	}

	for(int i = 0; i < 10; i++)
	{
		if(i % 2 == 0)
		{
			s.push(i); //插入偶数,入栈
		}
	}
	
	if(s.empty()) {
		cout << "第二次:s中为NULL" << endl;
	}else {
		cout << "第二次:s中不为NULL" << endl;
	}
	
}

int main()
{
	test01();

	system("pause");
	return 0;
}

05、小结

关于C++标准模板库中的stack的相关知识点,大概就说这些,下节我们就开始队列。

版权声明:转载请注明出处,谢谢!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐