C++ STL(1)--概述
1. 简述
STL即标准模板库 Standard Template Library,包含了许多在计算机科学领域里所常用的基本数据结构和算法。STL具有高可重用性、高性能、高可移植性(跨平台)的优点。
两个特点:
1.1 数据结构和算法分离。
1.2 它不是面向对象的,是基于模板(template)的。
2. 六大组件
组件 | 描述 | 例子 |
---|---|---|
容器(Container) | 各种数据结构,类模板实现 | array、set、map、vector、list |
算法(Algorithm) | 各种常用的算法,函数模板实现 | sort、find、copy、for_each |
迭代器(Iterator) | 提供访问容器中对象的方法 | iterator、const_iterator、reverse_iterator、const_reverse_iterator |
仿函数(Functor) | 使一个类的使用看上去象一个函数。class 或者class template通过重载operator()实现 | plus<T>、equal_to<T> |
适配器(Adaptor) | 用来修饰容器或者仿函数或迭代器接口 | |
分配器(Allocator) | 负责空间的配置与管理。是一个实现了动态空间配置、空间管理、空间释放的类模板 |
六大组件之间的关系,容器通过分配器取得数据存储空间,算法通过迭代器访问容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰容器(使其表现出另一种行为)。
3. 两种容器
3.1 序列式容器(Sequence Containers)
每个元素都有固定位置,如vector、deque、list。
3.2 关联式容器(Associated Containers)
元素位置取决于特定的排序准则,和插入顺序无关,如set、multiset、map、multimap
4. 算法
STL提供了大约100个实现算法的模版函数,后续文章将详细介绍。
算法主要由三个头文件<algorithm>,<numeric>和<functional>组成。
头文件 | 说明 |
<algorithm> | 所有STL头文件中最大的一个,由一大堆模版函数组成的。每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。 |
<numeric> | 体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。 |
<functional> | 定义了一些模板类,用以声明函数对象。 |
5. 迭代器
容器提供迭代器,算法使用迭代器。Iterator通过运用聚合对象的模式,使得可以在不知道对象
内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。
作用:迭代器与算法可以互不干扰地发展,最后又能一起无缝粘合地使用。
6. 仿函数
可以自定义仿函数,也可以使用STL内建的仿函数(必须包含<functional>头文件)。
而STL内建的仿函数包括三种:
分类 | |
---|---|
算术类 | 加:plus<T> 减:minus<T> 乘:multiplies<T> 除:divides<T> 模取:modulus<T> 否定:negate<T> |
关系运算类 | 等于:equal_to<T> 不等于:not_equal_to<T> 大于:greater<T> 大于等于:greater_equal<T> 小于:less<T> 小于等于:less_equal<T> |
逻辑运算 | 逻辑与:logical_and<T> 逻辑或:logical_or<T> 逻辑否:logical_no<T> |
7. 适配器
适配器概念源于设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼
容而不能合作的类,可以一起工作。适配器就是接口模板。
7.1 容器适配器
类型 | 描述 | 声明 |
stack | FILO,底层是deque | template<class T, class Container = std::deque<T>> class stack |
queue | FIFO,底层是deque | template<class T, class Container = std::deque<T>> class queue |
priority_queue | 进队后自动排序,默认大值先出,底层是vector | template<class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>> class priority_queue |
7.2 迭代器适配器
类型 | 函数 | 功能 | |
---|---|---|---|
插入迭代器 | front_insert_iterator | front_inserter | 在容器的头部插入元素,底层调用push_front() |
back_insert_iterator | back_inserter | 在容器的尾部插入元素,底层调用push_back() | |
insert_iterator | inserter | 在容器指定位置插入元素,底层调用insert() | |
反向迭代器 | reverse_iterator | 将迭代器的方向进行逆转,实现逆序遍历,底层是双向迭代器 | |
流迭代器 | ostream_iterator | 输出流迭代器 | |
istream_iterator | 输入流迭代器 | ||
移动迭代器 | move_iterator | make_move_iterator | 将元素从一个容器移动到另一个容器,不作copy |
7.3 仿函数适配器
仿函数适配器是一种特殊的函数对象,它可以将一个仿函数转换为另一个仿函数,或者将一
个普通函数指针转换为仿函数。
分类 | 功能 | |
---|---|---|
绑定 bind | bind1st | 将参数绑定为函数对象的第一个参数 |
bind2nd | 将参数绑定为函数对象的第二个参数 | |
否定 negate | not1 | 对一元函数对象取反 |
not2 | 对二元函数对象取反 | |
组合 compose | compose1、compose2 | 将两个仿函数对象组合成一个新的仿函数对象,其中一个仿函数对象的输出作为另一个仿函数对象的输入 |
普通函数修饰 | ptr_fun | 将一个普通函数指针转换为一个仿函数对象 |
成员函数修饰 | mem_fun | 存放对象指针 |
mem_fun_ref | 存放对象 |
8. 分配器
STL的分配器是一个模板类。它提供了一种可移植的方式来管理内存,可以根据需要自动调整
内存大小,并提供了一些特殊的内存分配策略,如内存池和堆栈分配等。STL分配器使用C++的
new和delete操作符来分配和释放内存,可以在不同的平台和编译器下使用。
相关文章:
C++ STL(1)--概述
1. 简述 STL即标准模板库 Standard Template Library,包含了许多在计算机科学领域里所常用的基本数据结构和算法。STL具有高可重用性、高性能、高可移植性(跨平台)的优点。 两个特点: 1.1 数据结构和算法分离。 1.2 它不是面向对象的,是基于模…...

unity 2d 入门 飞翔小鸟 死亡闪烁特效(十三)
一、c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bling : MonoBehaviour {public Texture img;public float speed;public static bool changeWhite false;private float alpha0f;// Start is called before the fi…...

Cannot find cache named ‘‘ for Builder Redis
当引入 Redissson 时,springCache 缓存机制失效 原因:springCache 默认使用本地缓存 Redisson 使用redis 缓存 最后都转成redis了。。。 总感觉哪不对 两者居然不共存...

IntelliJ IDEA的下载安装配置步骤详解
引言 IntelliJ IDEA 是一款功能强大的集成开发环境,它具有许多优势,适用于各种开发过程。本文将介绍 IDEA 的主要优势,并提供详细的安装配置步骤。 介绍 IntelliJ IDEA(以下简称 IDEA)之所以被广泛使用,…...

光线追踪算法实现
我们已经涵盖了所有要说的内容! 我们现在准备编写第一个光线追踪器。 你现在应该能够猜测光线追踪算法是如何工作的。 首先,请花点时间注意一下,光在自然界中的传播只是从光源发出的无数光线,它们四处反弹,直到到达我…...

学习深度强化学习---第3部分----RL蒙特卡罗相关算法
文章目录 3.1节 蒙特卡罗法简介3.2节 蒙特卡罗策略评估3.3节 蒙特卡罗强化学习3.4节 异策略蒙特卡罗法 本部分视频所在地址:深度强化学习的理论与实践 3.1节 蒙特卡罗法简介 在其他学科中的蒙特卡罗法是一种抽样的方法。 如果状态转移概率是已知的,则是…...
linux虚拟机使用81-persistent-net.rule后接口名依然改变的问题处理
测试环境:vmware workstation17 、oracle linux 7.8 1. 复位原有ifname 1)nmcli c s 查看管理的网卡 [rootrac2 ~]# nmcli c s NAME UUID TYPE DEVICE enp0s3 5b01a9de-9552-45da-a84a-1ae6c9506354…...
ARMV8 - A64 - 跳转和返回指令
说明 C语言等高级语言,根据是否需要返回到触发跳转代码的下一条代码,跳转有两种语句: 不需要返回,例如:if,goto,switch,while等语句。需要返回,例如:函数调…...

QX320F28335,自研内核指令集,主频150MHz,自研工具链,纯国产DSP,硬件兼容TMS320F28335
32位单核CPU 主频150MHz flash 1M SRAM 500KB 单精度浮点运算FPU 3个4M精度12位的ADC 12个ePWM 6个HRPWM(150ps)...

《使用ThinkPHP6开发项目》 - 登录接口一
《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 《使用ThinkPHP6开发项目》 - 创建应用-CSDN博客 《使用ThinkPHP6开发项目》 - 创建控制器-CSD…...

zabbix精简模板
一、监控项目介绍 linux自带得监控项目比较多,也不计较杂,很多监控项目用不到。所以这里要做一个比较精简得监控模版 二、监控模板克隆 1.搜索原模板 2.克隆模板 全克隆模板,这样就和原来原模板没有联系了,操作也不会影响原模…...
GO设计模式——14、代理模式(结构型)
目录 代理模式(Proxy Pattern) 代理模式的核心角色: 优缺点 使用场景 注意事项 代码实现 代理模式(Proxy Pattern) 代理模式(Proxy Pattern)通过引入代理对象来控制对真实对象的访问。 代…...

外贸SOHO建站怎么做?海洋建站方法策略?
外贸SOHO建站多少钱?外贸自助建站系统有哪些? 随着全球化的加速发展,外贸SOHO已经成为越来越多创业者的选择。然而,要想在竞争激烈的外贸市场中脱颖而出,一个专业的外贸网站是必不可少的。接下来海洋建站将探讨外贸SO…...

商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
鸿鹄云商 SAAS云产品概述 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、My…...

【淘宝网消费类电子产品销售数据可视化】
淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…...
AI编译器及TVM概述
AI编译器 AI编译器有许多不同的类型和品牌,以下是一些常见的AI编译器: TensorFlow:谷歌开发的深度学习框架,它包含了一个用于优化和编译TensorFlow模型的编译器。 PyTorch:一个基于Python的开源深度学习框架…...

排序-归并排序与计数排序
文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度:4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…...

国产数据库适配-人大金仓(kingbase V8R3)
金仓数据库是基于POSTGRE_SQL 参考资料 国产数据库人大金仓踩坑记录和函数适配_金仓数据库关系不存在-CSDN博客 Springboot工程 适配人大金仓 kingbase V8R3 引入驱动包和方言包 hibernate-5.2.17.Finaldialect.jar kingbase8-8.2.0.jar application.yml文件 driver-cla…...

HAAS 哈斯机床 读写刀补数据
哈斯机床不管是串口机床还是网口机床 都提供了Q命令 可以使用Q命令 进行刀具补偿的读取和写入 最多支持200把刀的 读取和写入...

Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目
下载qt-然后安装5.14.2_msvc2017 不知道安装那个就全选5.14.2的父级按钮 https://download.qt.io/archive/qt/5.14/5.14.2/ 安装Visual studio,下载直接下一步就行 配置Visual studio的qt环境 在线安装-重启Visual studio会自动安装 离线安装-关闭Visual studio点击安装 关闭…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...