[STL]stack和queue使用介绍

这篇具有很好参考价值的文章主要介绍了[STL]stack和queue使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[STL]stack和queue使用介绍

stack使用介绍

stack介绍

  1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
  2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
  3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
    • empty:判空操作
    • back:获取尾部元素操作
    • push_back:尾部插入元素操作
    • pop_back:尾部删除元素操作
  4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器, 默认情况下使用deque

构造函数

stack只有默认构造函数,构造一个空栈。

stack<int> st;

同样是构造一个空栈,stack还可以指定底层容器进行构造。

stack<int, vector<int>> st;

empty函数

empty函数用于判断stack是否为空。

#include <iostream>
#include <stack>
using namespace std;
int main()
{
	stack<int> st;
	cout << st.empty() << endl; //输出为1
	return 0;
}

push函数

push函数用于往stack中压入数据。

#include <iostream>
#include <stack>
using namespace std;
int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	cout << st.empty() << endl; //输出为0
	return 0;
}

top函数

top函数用于获取stack的顶部数据。

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	cout << st.top() << endl; //输出为3
	return 0;
}

size函数

size函数用于获取stack内的数据个数。

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	cout << st.size() << endl; //输出为3
	return 0;
}

pop函数

pop函数用于弹出stack顶部的数据。

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.pop();
	cout << st.top() << endl; //输出为2
	return 0;
}

queue使用介绍

queue介绍

  1. queue是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端 提取元素。
  2. queue作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。
  3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
    • empty:检测队列是否为空
    • size:返回队列中有效元素的个数
    • front:返回队头元素的引用
    • back:返回队尾元素的引用
    • push_back:在队列尾部入队列
    • pop_front:在队列头部出队列
  4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则默认使用标准容器deque

构造函数

queue只有默认构造函数,构造一个空队列。

queue<int> q;

同样是构造一个空队列,queue还可以指定底层容器进行构造。

queue<int, list<int>> q;

empty函数

empty函数用于判断queue是否为空。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	cout << q.empty() << endl; //输出为1
	return 0;
}

push函数

push函数用于往将数据尾插至队列。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	cout << q.empty() << endl; //输出为0
	return 0;
}

front函数

front函数用于获取队头的数据。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	cout << q.front() << endl; //输出为1
	return 0;
}

back函数

back函数用于获取队尾的数据。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	cout << q.back() << endl; //输出为3
	return 0;
}

size函数

size函数用于获取队列内的数据个数。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	cout << q.size() << endl; //输出为3
	return 0;
}

pop函数

pop函数用于删除队头的数据。

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.pop();
	cout << q.front() << endl; //输出为2
	return 0;
}

deque介绍

STL中stack和list的底层实现都使用的是deque容器。

deque(双端队列)兼容了vector和list的使用接口,使得deque可以在头尾两端进行插入和删除操作,并且还支持数据的随机访问。deque的结构示意图如下:

[STL]stack和queue使用介绍,C++,c++,开发语言,c语言,stl

deque设计了一个中控数组,往中控数组中插入数据需要从中间开始插入,然后从中间开始进行头插和尾插,中控数组中的结点存储着指针,指向一段连续的空间,中控数据空间不够了会进行扩容,并将原有数据拷贝。由于每个结点指向的连续空间内存储的数据个数和容量是已知的,因此要进行随机访问,可以通过计算得到相应的结点和连续空间内的相应位置来实现,当然往deque内中间位置插入数据也是从中间结点指向的空间开始插入,向deque头插(删)或尾插(删)只需要从中控数据的头结点和尾结点寻找数据,在指向的空间内找到对应位置进行操作。

优点:

  • 相比vector, 扩容代价更低。
  • 头插头删、尾插尾删效率相对vector更高,且时间复杂度为O(1)。
  • 相比list,空间利用率比较高。
  • 支持随机访问。

缺点:

  • 中间部分的数据的插入和删除存在取舍问题 – 保持随机访问的效率,会降低头尾数据操作的效率;保持头尾数据操作的效率,会降低随机访问的效率。
  • 优点方面的表现没有vector或list突出。

deque迭代器示意图如下:

[STL]stack和queue使用介绍,C++,c++,开发语言,c语言,stl

deque迭代器包含四个指针:

  • cur – 指向当前数据
  • first – 指向连续空间的开始位置
  • last – 指向连续空间的结束位置
  • node – 指向中控数组当前使用的结点位置

stack和queue选择deque的原因:

  1. stack和queue不需要遍历(因此stack和queue没有迭代器),只需要在固定的一端或者两端进行操作。
  2. 在stack中元素增长时,deque比vector的效率高(扩容时不需要搬移大量数据);queue中的元素增长 时,deque不仅效率高,而且内存使用率高。

总结: stack和queue使用deque发挥了其优点,规避了其缺点,使得效率在各种场景下都保持一定的水准。文章来源地址https://www.toymoban.com/news/detail-618736.html

到了这里,关于[STL]stack和queue使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【C++】STL之容器适配器——使用deque适配stack和queue

    【C++】STL之容器适配器——使用deque适配stack和queue

    个人主页:🍝在肯德基吃麻辣烫 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处。 本文章主要介绍容器适配器的功能,以及一个适配的场景。 容器适配器,按字面意思理解的话,就是用来对一个容器进行匹配的。在C++STL中,容器有:vector,list,deque,map,set等。

    2024年02月16日
    浏览(13)
  • STL——stack和queue

    STL——stack和queue

    stl中提供了栈和队列配接器供我们使用,以后就可以直接使用了。不需要我们自己造轮子。 使用细节参考文档就可以,与之学过的容器并无二致。栈和队列的特性我们再学习数据结构时已经了解了。这里就不在赘述了。 stack - C++ Reference (cplusplus.com) queue - C++ Reference (cplusplus

    2024年02月12日
    浏览(10)
  • 【C++】STL中stack,queue容器适配器的模拟实现(使用deque容器)

    【C++】STL中stack,queue容器适配器的模拟实现(使用deque容器)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和

    2024年02月15日
    浏览(18)
  • STL常用梳理——STACK、QUEUE

    STL常用梳理——STACK、QUEUE

    STL list 容器,又称 双向链表 容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。 可以看到,list 容器中各个元素的前后顺序是靠指针来维系的,每个元素都配备了 2 个指针

    2024年02月03日
    浏览(8)
  • C++ STL stack & queue

    C++ STL stack & queue

    目录 一.stack 介绍  二.stack 使用 三.stack 模拟实现 普通版本: 适配器版本: 四.queue的介绍 五. queue使用 六.queue模拟实现 七.deque介绍 1.容器适配器 2.deque的简单介绍 3.deque的缺陷 4.为什么选择deque作为stack和queue的底层默认容器 stack------reference 1. stack是一种容器适配器,专门用在

    2024年02月12日
    浏览(11)
  • [ C++ ] STL---stack与queue

    [ C++ ] STL---stack与queue

    目录 stack简介 stack的常用接口 queue简介 queue的常用接口 stack的模拟实现 queue的模拟实现 1. stack是具有后进先出操作的一种容器适配器 ,其只能从容器的一端进行元素的插入与删除操作 ; 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并

    2024年03月28日
    浏览(12)
  • C++ STL--->stack和queue

    C++ STL--->stack和queue

    stack文档 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。 stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为

    2024年01月16日
    浏览(30)
  • STL——stack容器和queue容器详解

    STL——stack容器和queue容器详解

      目录 💡stack 💡基本概念 常用接口  💡queue 💡基本概念 💡常用接口 栈(stack): 一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的元素都遵循后进先出的原则(LIFO,Last In First Out)。 压栈

    2024年02月02日
    浏览(10)
  • STL: 容器适配器stack 与 queue

    STL: 容器适配器stack 与 queue

      目录 1.容器适配器 1.1 STL标准库中stack和queue的底层结构 1.2 deque的简单介绍(了解) 1.2.1 deque的原理介绍 1.2.2 deque的缺陷 1.2.3 为什么选择deque作为stack和queue的底层默认容器 2. stack的介绍和使用 2.1 stack的介绍  2.2 stack的使用 2.3 利用deque模拟实现stack 3.queue的介绍和使用 3.1 queue的

    2024年02月05日
    浏览(14)
  • 【C++】学习STL中的stack和queue

            今天这篇博客的内容主要关于STL中的stack、queue和priority_queue三种容器。         stack和queue的使用方式非常简单,我们只要根据之前学习数据结构的经验和文档介绍就可以轻松上手。于是我们直接开始对它们的模拟实现。         stack和queue我们在数据结构阶段就曾经

    2024年02月10日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包