当前位置: 首页 > 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

http://www.xdnf.cn/news/116209.html

相关文章:

  • 【高中数学/古典概率】4红2黑六选二,求取出两次都是红球的概率
  • 【C++】内存管理:内存划分、动态内存管理(new、delete用法)
  • 跑MPS产生委外采购申请(成品)
  • 机器人结构认知与安装
  • Vue 3 相比 Vue 2 的优势
  • 深入详解人工智能数学基础——概率论中的贝叶斯深度学习
  • likeadmin前端请求地址配置踩坑
  • CentOS 7上安装与配置Memcached及PHP客户端使用教程
  • PCB 过孔铜厚的深入指南
  • QMT学习课程Day1
  • Web3钱包开发功能部署设计
  • 大语言模型时代,单细胞注释也需要集思广益(mLLMCelltype)
  • 论文笔记(七十九)STOMP: Stochastic Trajectory Optimization for Motion Planning
  • 【基础】Node.js 介绍、安装及npm 和 npx功能了解
  • MySQL 事务(详细版)
  • 【一览表】病理图像处理流程
  • leetcode 2799. 统计完全子数组的数目 中等
  • 立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务
  • Vue实战(08)解决 Vue 项目中路径别名 `@` 在 IDE 中报错无法识别的问题
  • 如何调用大语言模型的API?
  • C#中实现JSON解析器
  • 精益数据分析(19/126):走出数据误区,拥抱创业愿景
  • 快速上手GO的net/http包,个人学习笔记
  • 深入理解MVP架构:让UI层与业务逻辑完美分离的设计模式
  • 学习ros过程中常用指令
  • 【数据可视化-30】Netflix电影和电视节目数据集可视化分析
  • vue3实现v-directive;vue3实现v-指令;v-directive不触发
  • 用 Python 实现基于 Open CASCADE 的 CAD 绘图工具
  • 深入浅出JavaScript常见设计模式:从原理到实战(1)
  • 【Hive入门】Hive查询语言(DQL)完全指南:从基础查询到高级分析