【STL】顺序容器与容器适配器

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

1顺序容器概述

给出以下顺序容器表:

顺序容器类型 作用
vector 可变大小的数组,支持快速访问,除尾元素的插入或者删除很慢
string 与vector相似,只不过专门用来存字符
list 双向链表。只能双向顺序访问,插入删除的效率都很高
forward_list 单向链表。只能单向顺序访问,插入删除的效率都很高
deque 双端队列 。 支持快速随机访问。在头尾位置插入删除很快,中间则很慢
array 固定大小的数组。支持快速随机访问。不能删除和添加元素

由于前面已经对vector、string、list有了较为详细的讲解,下面只介绍部分容器:

1.1array

除了array之外,其他容器都支持灵活的内存管理方式。根据实际情况可以自由调节容器的容量大小。这使得array的引用场景受到了限制。因为一旦初始化了array的大小,后面就不能在被改变了。
虽然看起来array的限制很多,但是array也因此变得更加安全,也更容易使用
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

1.2forward_list

forward_list和array都是新C++标准增加的类型。forward_list的设计目标是达到与最好的手写的单向链表数据结构相当的性能。因此,forward_list没有size操作,因为保存或者计算其大小就会比手写链表多出时间或者空间上面的开销。

值得注意的是,由于forward_list是单向链表,也就不具备反向遍历的功能,也就没有反向迭代器。相比于list,其删除节点的操作也会稍微复杂一些。
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

1.3deque

deque是一个更为复杂的数据结构。与string和vecotr类似,deque支持快速的随机访问,在中间位置添加或者删除元素的代价可能很高。当时与string和vector不同的是,deque首尾插入或者删除的效率很高,这一点相当于list或者forward_list。我们可以把deque看成是首插元素高效的vector

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

2.如何确定使用哪种顺序容器呢?

以下是选择使用顺序容器的参考:
1.如果没有其他的理由,那就优先考虑vector
2.如果你的程序有很多的小元素,且不想要产生额外的空间开销,那就不要用list和forward_list.
3.要支持快速随机访问,用array或者vector。
4.如果程序要求频繁的在容器中间插入或者删除元素,那就使用list或者forward_list.
5.如果程序要求在首尾插入或者删除元素,但是不在中间插入删除元素,那就选择deque。
6.如果只是在读取输入的时候需要在中间插入元素,可以考虑读取时用list或者forward_list,之后再拷贝到vector容器中。

3.容器适配器的概念

除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue和priority_queue。适配器是标准库中的一个概念,容器、迭代器、函数都有适配器。适配器可以使某种事物的行为看起来像是另外一回事。一个容器适配器用一个已有的容器类型,使其行为看上去像一种不同的类型。例如,stack适配器可以接受vector类型,在vector的基础上重新定义其成员函数,使得整体看上去是一个stack。有点借鸡生蛋的意思。所有的适配器都要有添加删除以及访问尾元素的能力

不同的适配器可以接受的容器类型会有区别。例如stack需要有直接访问尾元素的能力,就不能构造于forward_list之上。queue要求弹出首元素,就不能构造于vector之上。priority_queue要求随机访问的能力,就不能构造于list和forward_list之上。

4.如何定义适配器呢?

每一个适配器都应该要有两个构造函数:默认构造创建一个空对象。接受一个容器的构造函数拷贝该容器来初始化适配器。
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法
stack和queue默认是用deque实现的,priority_queue默认用vector实现的。
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法
【STL】顺序容器与容器适配器,c++入门到进阶,c++,开发语言,算法

我们可以显示的指定适配器用什么类型的容器去构建

	stack<int> st1;//用deque构建
	stack<int,vector<int>> st2;//用vecor<int> 构建
	stack<string, vector<string>>s3;//用string构建

其它适配器的的用法也跟上面类似。文章来源地址https://www.toymoban.com/news/detail-851458.html

到了这里,关于【STL】顺序容器与容器适配器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 22 标准模板库STL之容器适配器

    概述         提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一

    2024年02月05日
    浏览(30)
  • 【C++】STL之容器适配器——使用deque适配stack和queue

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

    2024年02月16日
    浏览(43)
  • STL容器适配器 -- stack和queue(使用+实现)(C++)

    栈和队列数据结构+画图分析如果对栈和队列的结构不了解的,可以先看该链接的内容 使用stack时需要头文件 #includestack stack是一种容器适配器,用于具有 后进先出 (LIFO)的环境中。只能从容器的一端(栈顶),执行删除、插入和提取操作。 stack是作为容器适配器实现的,容器

    2024年02月14日
    浏览(48)
  • STL:双端队列&容器适配器&仿函数&优先级队列

    双端队列可以在头部和尾部进行插入删除操作 与vector相比,头插效率高,不需要搬移元素 与list相比,空间利用率高 deque逻辑上空间是连续的,物理上并不是,是由一段段小空间拼接而成的 双端队列的迭代器比较复杂 cur:指向空间中被遍历的那个元素 first:指向空间开始

    2024年02月16日
    浏览(32)
  • 【STL】容器适配器stack和queue常见用法及模拟实现

    1.stack介绍及使用 1.1 stack的介绍 stack文档介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 stack是作为容器适配器被实现的,容器适配器是使用特定容器类的封装对象作为其基础容器的类,提供一

    2024年02月06日
    浏览(36)
  • 【简化程序设计】C++STL“容器适配器“之栈和队列

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++初阶 🎉代码仓库:小智的代码仓库 【本节目标】: stack的介绍和使用 stack的模拟实现 queue的介绍和使用 queue的模拟实现 priority_queue的介绍和使用 priority_queue的模拟实现 容器适配器 deuqe的介绍

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

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

    2024年02月15日
    浏览(35)
  • 【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 和C语言学习期间的学习顺序一样 顺序表,链表过了就是栈和队列 但是栈和队列非常特殊,它的内部结构 并不是靠自己实现的,而是一种 适配

    2024年02月08日
    浏览(32)
  • 【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现

    适配器是一种设计模式 (设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 例如我们常见的充电器就是一种适配器,它将我们常用的220V交流电压转化为4,5V (或者其他更高的电

    2023年04月26日
    浏览(48)
  • 容器适配器---deque和STL ---stack queue priority_queue的模拟实现 C++

    目录 一、容器适配器 deque原理 deque的缺陷 deque的优势 二、stack的模拟实现  三、queue的模拟实现 四、优先级队列的模拟实现 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户

    2024年02月02日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包