当前位置: 首页 > news >正文

c加加学习之day06->STL标准库->day01

1.介绍:C++ 标准模板库(Standard Template Library,简称 STL)是一组泛型编程的模板类和函数,旨在提供常用的数据结构、算法和函数对象。STL 是 C++ 标准库的一部分,极大地提高了编程效率和代码的可重用性。STL 主要分为6个部分。

STL 的设计基于泛型编程的思想,通过使用模板,STL 提供了与类型无关的代码,从而实现了代码的高复用性和灵活性

---------------------------------------------------顺序容器-----------------------------------------------------------

1.顺序容器(Sequence Containers)是一类用于存储和管理具有顺序关系的元素的容器。这些容器允许在容器中的任意位置插入和删除元素,并且可以通过迭代器访问元素。C++ STL中的顺序容器主要包括以下几种

2.1. std::vector

2. std::deque (双端队列)

3. std::list (双向链表)

4. std::forward_list (单向链表):

特性 :单向链表,支持在任何位置快速插入和删除元素。优点 :在任何位置插入和删除元素效率高(O(1)时间复杂度),内存占用较少。

缺点 :不支持随机访问,访问元素需要从头节点开始遍历(O(n)时间复杂度)。不支持反向遍历。

5. std::array (C++11引入):

特性 :固定大小的数组,大小在编译时确定,不支持动态调整大小。

优点 :支持随机访问,访问速度快(O(1)时间复杂度)。性能通常优于 std::vector ,因为不需要动态内存分配。

缺点 :大小固定,不能动态调整。

------------------------------------------------------顺序容器--------------------------------------------------

一.顺序容器:顺序容器(Sequence Containers)是一类用于存储和管理具有顺序关系的元素的容器。这些容器允许在容器中的任意位置插入和删除元素,并且可以通过迭代器访问元素。C++ STL中的顺序容器主要包括以下几种:

1.std::vector(动态数组)

2.std::deque(双端队列)

3.std::list(双向链表):

特性 :单向链表,支持在任何位置快速插入和删除元素。优点 :在任何位置插入和删除元素效率高(O(1)时间复杂度),内存占用较少。

缺点 :不支持随机访问,访问元素需要从头节点开始遍历(O(n)时间复杂度)。不支持反向遍历

学习网站:vector 类 | Microsoft Learn

二。VECTOR

补充:

双端队列:

3.list双向链表

------------------------------------------------------容器适配器------------------------------------------------------------

1.introduce:

适配器(Adaptors)是标准库中的一个通用概念, 容器、迭代器和函数都有适配器 。

C++中的 适配器是一种设计模式 , 用于将一个类或对象的接口转换为另一个接口,以便不同的类或对象可以相互协作 。适配器模式可以分为类适配器和对象适配器两种形式。

类适配器通过继承源类并实现目标接口来实现适配。在类适配器中,适配器类同时继承自源类和目标接口,并重

新实现目标接口的方法,以将源类的方法转换为目标接口的方法。

对象适配器则通过在适配器类中包装一个源对象来实现适配。在对象适配器中,适配器类持有一个源对象的引用,并实现目标接口的方法,在方法内部调用源对象的相应方法来完成适配。

标准库定义了三个序列容器适配器: stack,queue,priority_queue

1.queue:是一个队列 先进先出

queue不是标准的STL容器,却以标准的STL容器为基础。queue是在deque的基础上封装的
之所以选择deque而不选择vector是因为deque在删除元素的时候释放空间,同时在重新申请空间的时候无需拷贝所有元素

2.stack

stack是一个栈 , 实现先进后出功能 ,

stack不是标准的STL容器,却以标准的STL容器为基础。stack是在deque的基础上封装的。

3.priority_queue

优先级队列:优先级大的先出队,底层数据结构默认是大根堆(完全二叉树)。

优先级队列底层默认把数据组成一个大根堆结构 ,而大根堆的构建就需要在一个内存连续的数组上(堆中结点和它左右孩子的关系是通过下标计算的), vector动态数组底层是绝对连续的,而deque是分段连续的,所以用vector

相关文章:

  • 从零开始在Win上添加一块QEMU开发板(四)实现简单USART
  • AD16如何对同值元件进行排序
  • 2024武汉邀请赛B.Countless Me
  • 【Java 数据结构】泛型
  • 【银河麒麟高级服务器操作系统】磁盘只读问题分析
  • X0405-ASEMI电源AI器件专用X0405
  • C#中实现JSON解析器
  • SSH 反向隧道访问内网服务
  • 【网络】TCP/IP协议学习
  • 【蓝桥杯】可分解的正整数
  • Linux学习笔记之动静态库
  • Java基础 — 运算符与输入器
  • css3新特性第七章(3D变换)
  • OpenBMC:BmcWeb login认证
  • vscode插件系列-2、认识vscode
  • Golang 闭包学习
  • 数论知识啊
  • 电子处方模块开发避坑指南:从互联网医院系统源码实践出发
  • 办公人导航网站
  • JavaWeb:HtmlCss
  • 远程控制、窃密、挖矿!我国境内捕获“银狐”木马病毒变种
  • 专访|攸佳宁:手机只是矛盾导火索,重要的是看见孩子的内心
  • 儒说︱问世间孝为何物
  • 讲座预告|大国博弈与创新破局:如何激励中国企业创新
  • “茉上茶田”傍大牌诱导加盟续:违规从事特许经营被罚没670余万元
  • 上海市进一步支持汽车置换更新!一图读懂补贴政策实施细则