iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++中的stack和dequeue解析
  • 623
分享到

c++中的stack和dequeue解析

c++ stack和dequeuec++ stack 2023-05-18 20:05:47 623人浏览 泡泡鱼
摘要

目录stack介绍stack的定义stack的数据插入stack中数据的个数stack数据删除stack中数据的查看判断stack对象是否为空stack对象的数据交换queue的介绍

stack介绍

首先stack是一个类这个类是专门用来存数据,并且这个类是一个模板类,所以我们可以使用这个stack来存储各种各样的数据,但是这个类在存储数据的时候得遵循LIFO规则也就是后进先出原则:后进入stack的数据会先出stack,我们把最后进入stack对象的数据称为栈顶元素,把最先进入stack对象的数据称为栈底元素,下面是这个类的英文介绍:

stack的定义

我们来看看stack的构造函数:

库中的stack函数只提供了一种形式,并且这种形式的参数只有一个还提供了缺省值,那么我们在使用这个类的时候就不要管这个参数直接使用缺省值即可,比如下面的代码:

#include<iOStream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	return 0;
}

这样我们就创建了一个空类。

stack的数据插入

在stack中插入数据只能用到push函数:

这个函数有一个参数,并且该参数是value_type类型,那么这个类型的意思是:模板中第一个参数的类型

也就是stack在显示初始化的时候我们给的那个类型,那么该函数的使用代码如下:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	return 0;
}

我们可以通过调试看到这里的s1中确实有数据1 2 3 4 :

stack中数据的个数

这个函数就是显示stack对象中含有数据的个数

比如下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	return 0;
}

这段代码的运行结果为:

stack数据删除

在stack当中不存在头删尾删和任意位置的删除,只有一个pop函数来删除数据最后进入stack对象的数据,也就是栈顶元素:

比如说下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	s1.pop();
	return 0;
}

我们通过调试可以看到在pop函数执行之前对象s1中的内容为:

当我们执行完这里的pop函数之后,由于元素4是最后一个进入stack对象的,所以它是栈顶元素,那么在执行完pop函数之后该元素就会被删除,我们来看看调试的结果:

那么这就是pop函数的作用。

stack中数据的查看

在stack当中没有迭代器,范围for和操作符[ ]重载这些功能,因为stack遵守后进先出的LIFO规则,所以我们这里只能通过top函数来查看stack对象中的栈顶元素的内容,

当我们想看栈顶的后一个元素的时候,就只能将栈顶的元素删除再调用top函数来进行查看,比如说下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	cout << "对象中栈顶的元素为:" << s1.top() << endl;
	s1.pop();
	_size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	cout << "现在栈顶的元素为:" << s1.top() << endl;
	return 0;
}

这段代码的运行结果如下:

并且我们还可以通过top函数来修改栈顶元素的内容,比如说下面的代码:

int main()
{
	stack<int>s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	cout << "修改前栈顶的元素为:" << s1.top() << endl;
	s1.top() = 10;
	cout << "修改后栈顶的元素为:" << s1.top() << endl;
}

这段代码的运行结果如下:

判断stack对象是否为空

当我们想看看stack对象是否为空的时候就可以用到empty函数,这个函数的功能就是检查对象的数据是否为空,如果为空的话这个函数就会返回true,如果不为空的话这个函数就会返回flase,该函数的介绍如下:

这里就不用演示了。

stack对象的数据交换

stack也提供了,swap函数其作用就是将两个stack对象的数据进行交换,该函数的介绍如下:

我们可以看看下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	stack<int> s2;
	s2.push(5);
	s2.push(6);
	s2.push(7);
	s2.push(8);
	s1.swap(s2);
	return 0;
}

在执行swap函数之前两个对象的内容如下:

执行完swap函数之后两个对象的内容为:

那么以上就是stack库中的所有基本内容。

queue的介绍

队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

queue的定义

这个对象的构造函数也只有一个参数,并且这个参数也是提供了缺省参数,我们使用的时候可以不用管,我们使用的时候直接创建一个空队列就行:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	return 0;
}

queue的数据插入

通过这个函数,我们可以往指定队列对象中插入数据,那么这里的参数类型得和队列的数据相同,我们可以看卡下面的代码:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	return 0;
}

我们创建队列的时候显示初始化为int类型,那么我们使用push函数的时候也得传递int类型的数据,那么我们这里就可以通过调试来看到这个对象的中内容:

front

这个函数的作用就是返回队列头部的值,并且我们可以通过这个函数来修改队列头部的值,比如说下面的代码:

using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout <<"front 指向的元素为:" << q1.front() << endl;
	q1.front() = 10;
	cout << "front 指向的元素为:" << q1.front() << endl;
	return 0;
}

这段代码的运行结果如下:

back

这个函数的作用与front函数相反,这个函数就是返回队列尾部的值并且同样可以对其进行修改,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "back 指向的元素为:" << q1.back() << endl;
	q1.back() = 10;
	cout << "back 指向的元素为:" << q1.back() << endl;
	return 0;
}

queue的元素个数

size函数的作用就是返回队列中元素的个数,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素个数为:" << q1.size() << endl;
	q1.push(5);
	cout << "q1的元素个数为:" << q1.size() << endl;
	return 0;
}

这段代码的运行结果如下:

queue中元素的删除

在队列中删除元素得用到pop函数,这个函数可以将队列中队头的数据进行删除,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素个数为:" << q1.size() << endl;
	q1.pop();
	cout << "q1的元素个数为:" << q1.size() << endl;
	return 0;
}

这段代码的运行结果如下:

empty

当我们想看看queue对象是否为空的时候就可以用到empty函数,这个函数的功能就是检查对象的内容是否为空,如果为空的话这个函数就会返回true,如果不为空的话这个函数就会返回flase。

queue的数据交换

如果我们想将两个queue对象的数据进行交换的话,我们这里就可以使用swap函数,这里为了防止使用者用错了方法,库中还提供了另外一种使用的形式:

我们来看看下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	queue<int> q2;
	q2.push(5);
	q2.push(6);
	q2.push(7);
	q2.push(8);
	q1.swap(q2);
	swap(q1, q2);
	return 0;
}

我们可以通过调试来看到在swap函数执行之前两个对象的内容为:

执行了第一个swap函数之后,两个对象的内容进行了交换:

当我们再执行另一种swap函数之后对象的数据如下:

那么这就是swap函数的作用。

到此这篇关于c++中的stack和dequeue介绍的文章就介绍到这了,更多相关c++ stack和dequeue内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c++中的stack和dequeue解析

本文链接: https://www.lsjlt.com/news/212444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中的stack和dequeue解析
    目录stack介绍stack的定义stack的数据插入stack中数据的个数stack数据删除stack中数据的查看判断stack对象是否为空stack对象的数据交换queue的介绍...
    99+
    2023-05-18
    c++ stack和dequeue c++ stack
  • C++中stack的pop()函数返回值解析
    目录stack的pop()函数返回值全部demo分析C++的返回值优化从函数返回值RVOstack的pop()函数返回值 int temp = s.pop(); co...
    99+
    2024-04-02
  • pytorch中stack和cat的及to_tensor的示例分析
    这篇文章给大家分享的是有关pytorch中stack和cat的及to_tensor的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初入计算机视觉遇到的一些坑1.pytorch中转tensorx=np.ra...
    99+
    2023-06-15
  • 如何理解JVM中的Stack和Heap
    如何理解JVM中的Stack和Heap,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从...
    99+
    2023-06-17
  • C++中stack容器的使用
    目录一、stack容器1.1 简介1.2 常用接口一、stack容器 1.1 简介 ① stack是一种先进后出的容器,它只有一个出口。 ② 栈中只有顶端的元素才可以被外界使用,因此...
    99+
    2023-05-13
    C++ stack容器
  • Java中Stack与Queue的示例分析
    这篇文章给大家分享的是有关Java中Stack与Queue的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮...
    99+
    2023-06-15
  • 详解Pandas中stack()和unstack()的使用技巧
    目录介绍1.单层2.多层次:简单案例3. 多层次:缺失值4. 多层次:规定要堆叠的层次5. 多层次:删除缺失值6. unstack: 简单案例7. unstack:更多用法结论介绍 ...
    99+
    2024-04-02
  • 亲自教你实现栈及C#中Stack源码分析
    定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作。 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一...
    99+
    2024-04-02
  • C++中的stack容器如何使用
    这篇文章主要讲解了“C++中的stack容器如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的stack容器如何使用”吧!stack容器1 简介① stack是一种先进后出的容...
    99+
    2023-07-05
  • C/C++中栈(stack)&堆(heap)详解及其作用介绍
    目录概述程序运行中的栈和堆堆和栈的差异申请方式和回收方式申请后系统的响应申请效率比较申请大小的限制堆和栈中的存储内容概述 栈 (stack) 是为执行线程流出的内存空间. 堆 (he...
    99+
    2024-04-02
  • python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
    目录1.stack()2. unstack()3. pivot()总结1.stack() stack()用于将列索引转换为最内层的行索引,这样叙述比较抽象,看示例就容易理解啦: 准备...
    99+
    2024-04-02
  • C++ 超详细讲解stack与queue的使用
    目录stack介绍和使用模拟实现stack的使用例题最小栈栈的弹出压入序列逆波兰表达式求值queue模拟实现容器适配器deque简介priority_queue优先级队列priori...
    99+
    2024-04-02
  • C++中Stack(栈)的使用方法与基本操作详解
    目录一、stack概述二、stack的基本操作1、头文件2、stack创建方式3、栈顶和栈底操作4、元素添加和删除5、栈的大小操作6、判断栈是否为空三、stack的实际应用一、sta...
    99+
    2023-05-19
    C++ Stack栈用法 C++ Stack C++ 栈
  • 怎么解析C++中的const和constexpr
    本篇文章为大家展示了怎么解析C++中的const和constexpr,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一.const常量与#define比较define只是简单的替换,没有类型,cons...
    99+
    2023-06-21
  • C++详细讲解stack与queue的模拟实现
    目录容器适配器双端队列概念结构deque迭代器优缺点stack模拟queue模拟实现容器适配器 适配器是一种设计模式(设计模式是一套反复使用的、大部分人知道的代码设计经验的总结),该...
    99+
    2024-04-02
  • c语言数据结构之栈和队列详解(Stack&Queue)
    目录简介栈一、栈的基本概念1、栈的定义2、栈的常见基本操作二、栈的顺序存储结构1、栈的顺序存储2、顺序栈的基本算法3、共享栈(两栈共享空间)三、栈的链式存储结构1、链栈2、链栈的基本...
    99+
    2024-04-02
  • 浅谈pytorch中stack和cat的及to_tensor的坑
    初入计算机视觉遇到的一些坑 1.pytorch中转tensor x=np.random.randint(10,100,(10,10,10)) x=TF.to_tensor(x) ...
    99+
    2024-04-02
  • C++中的位运算和位图bitmap解析
    目录位运算总结移位运算位运算应用举例位图位运算总结 移位运算 移位运算是双目运算符,两个运算分量都是整形,结果也是整形。“<<” 左移:右边空出的...
    99+
    2024-04-02
  • C++中的堆和栈问题详细解析
    C++中的堆和栈问题详细解析在C++中,堆(Heap)和栈(Stack)是两个重要的概念,用于管理内存的分配和释放。本文将详细解析堆和栈的概念、区别以及使用时需要注意的问题,并提供具体的代码示例。堆和栈的定义堆和栈均属于计算机内存中的一部分...
    99+
    2023-10-22
    ) C++堆 ) C++栈 ) 堆和栈区别
  • c/c++中变量的声明和定义深入解析
    不管是函数还是变量的声明 ,都是为了告诉编译器我要使用这个变量或者函数了,用于类型检查。在定义 的时候编译器是不会分配任何内存的, 比如下面的函数:复制代码 代码如下:void fu...
    99+
    2022-11-15
    变量 c++ c
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作