C++--STL总结

news2024/12/23 9:12:28

参考教程:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili

软件界一直希望建立一种可重复利用的东西,C++的面向对象泛型编程思想,目的就是复用性的提升。
大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作。
为了建立数据结构和算法的一套标准,诞生了STL。

一.STL基本概念

STL(Standard Template Library,标准模板库),通俗地来讲就是一套与数据结构和算法有关的标准库。
【1】vector,list,deque等库定义了数据结构模板类供我们使用。
【2】algorithm和numeric库定义了操作数据结构的相关算法
【3】functional库中定义了操作数据结构的内置仿函数

注:STL 几乎所有的代码都采用了模板类或者模板函数

二.STL六大组件

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

【1】容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
STL容器就是将运用广泛的数据结构实现类。主要运用到面向对象和模板等知识。
常用的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等C++都提供了对应的实现类。
【2】算法:各种常用的算法,如sort、find、copy、for_each等
【3】迭代器:类似于指针,可以依序寻访某个容器所含的各个元素,算法的底层实现依赖于迭代器。因此也被称为容器和算法之间粘合剂,容器和算法之间通过迭代器进行无缝连接。
【4】仿函数:行为类似函数,可作为算法的某种策略。
一般常用的就是前面这四个。

【5】适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
【6】空间配置器:负责空间的配置与管理。

上面搞不懂没关系,用多了回来看就懂了。

三.STL常见容器

数组--vector        字符串--string        链表--list        双端数组--deque       
栈--stack        堆--queue        优先队列--priority_queue        
集合--set/multiset【set不允许容器有重复的元素,multiset允许容器中有重复的元素】       
键值对--map/multimap【map不允许容器有重复的元素,multimap允许容器中有重复的元素】

总结:
vector,list,deque等库定义了数据结构模板类供我们使用,由于这些类是其对应数据结构(或者说是抽象数据类型)的映射,所以这些类提供了该抽象类型的相关运算对应的方法供我们调用。
同时这些类底层实现也使用了适合其抽象类型的存储、组织数据的方式,从而使得这些类的相关运算非常高效。

四.STL常用算法

容器中只提供了抽象数据类型所具有的运算,但是很多时候我们还需要进行该容器运算之外的操作,比如对vector元素的排序我们可以使用sort算法,对队列之类的遍历我们可以使用for_each算法。
algorithm和numeric算法库提供了这类操作所对应的函数,这些函数一般传入迭代器(可以当成指针)作为参数。

<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数

常见算法函数:
for_each--遍历
sort--排序
set_intersection// 求两个容器的交集
set_union// 求两个容器的并集
set_difference// 求两个容器的差集

五.STL函数对象与仿函数

函数对象一般用在算法上。我们使用算法的时候有个问题,最常见的比如说排序,有时候我们要从小到大排序,有时候要从大到小排序。那我们怎么自定义规则呢?这时候就使用仿函数。

1.概念

重载函数调用操作符的类,其对象常称为函数对象
函数对象
使用重载的()时,行为类似函数调用,也叫仿函数

本质:函数对象(仿函数)是一个,不是一个函数

谓词:
返回bool类型的仿函数称为谓词,如果operator()接受一个参数,那么叫做一元谓词,如果operator()接受两个参数,那么叫做二元谓词

2.特点

(1)函数对象在使用时,可以像普通函数那样调用, 可以有参数,可以有返回值
(2)函数对象超出普通函数的概念,函数对象可以有自己的状态
(3)函数对象可以作为参数传递

3.内建函数对象

概念:STL内建了一些函数对象在<functional>库中。里面定义了一些模板类,用以声明函数对象。

这些内建函数分为:
【1】算术仿函数--实现四则运算

【2】关系仿函数--实现关系对比

【3】逻辑仿函数--实现逻辑运算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【DevOps】Git 图文详解(二):Git 安装及配置

Git 图文详解&#xff08;二&#xff09;&#xff1a;Git 安装及配置 1.Git 的配置文件2.配置 - 初始化用户3.配置 - 忽略.gitignore Git 官网&#xff1a;https://www.git-scm.com/ 下载安装包进行安装。Git 的使用有两种方式&#xff1a; 命令行&#xff1a;Git 的命令通过系…

Linux上使用Python源码编译安装Python

安装python apt install python3-dev python3 python3-venv yum install python38-devel源码安装Python 1.下载需要的Python版本 Python源码地址&#xff1a;https://www.python.org/downloads/source/ 2.安装gcc&#xff08;yum install gcc&#xff09; 3.解压&#xff0c…

电子病历编辑器源码(Springboot+原生HTML)

一、系统简介 本系统主要面向医院医生、护士&#xff0c;提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式&#xff0c;通过浏览器方式访问和使用系统功能&#xff0c;提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#xff0c…

在 el-table 中嵌入 el-checkbox el-input el-upload 多组件,实现复杂业务场景

由于业务场景的复杂性&#xff0c;需实现&#xff1a;在 el-table 表格中 嵌入 el-checkbox 多选框 及 el-input 输入框 及 el-upload 上传组件 &#xff0c;先附上实现效果图。 从图片可以看出其实就是一个规格可以带有多个属性的规格表&#xff0c;实现此效果需涉及到的知识点…

安装应用与免安装应用差异对比

差异 安装的程序和免安装的应用程序之间有以下几个方面的差别&#xff1a; 安装过程&#xff1a;安装的程序需要通过一个安装程序或安装脚本进行安装。这个过程通常会将应用程序的文件和依赖项复制到指定的目录&#xff0c;并进行一些配置和注册操作。免安装的应用程序则不需要…

vue监听对象属性值变化

一、官方文档 二、实现方法 方法一、直接根据watch来监听 export default {data() {return {object: {username: ,password: }}},watch: {object.username(newVal, oldVal) {console.log(newVal, oldVal)}} }方法二&#xff1a;利用watch和computed来实现监听 利用computed定…

HCL设备启动失败——已经解决

摸索了一个多小时&#xff0c;终于搞定了&#xff0c;首先HCL这款软件是需要安装Oracle VM Visual Box的&#xff0c;小伙伴们安装的时候记得点击安装Visual Box&#xff1b; 安装完后显示设备不能启动&#xff0c;然后我根据这个 HCL模拟器中Server设备启动失败的解决办法_hc…

电路综合-基于简化实频的集总参数电路匹配3-将任意阻抗用集总参数匹配至归一化阻抗

电路综合-基于简化实频的集总参数电路匹配3-将任意阻抗用集总参数匹配至归一化阻抗 前面的相关理论&#xff1a; 电路综合-基于简化实频的集总参数电路匹配1 电路综合-基于简化实频的集总参数电路匹配2-得出解析解并综合 理论这两个已经介绍过了&#xff0c;直接给出案例 代码…

用低代码平台开发应用

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

基于协作mimo系统的RM编译码误码率matlab仿真,对比硬判决译码和软判决译码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... while(Err < TL…

B站批量取消关注

找到关注页面&#xff1a; 右键检查或者按F12进入开发者界面 然后选console&#xff0c;在页面下面输入下面jQuery代码&#xff0c;然后按回车。复制粘贴两次这一页的博主就能全部取消大概20个 然后刷新页面&#xff0c;接着粘贴两边代码&#xff0c;循环如此即可。 $(".…

SSH协议简介与使用

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议&#xff0c;可有效弥补网络中的漏洞。通过SSH&#xf…

Find My数据线|苹果Find My技术与数据线结合,智能防丢,全球定位

数据线是用来连接移动设备和电脑的&#xff0c;来达到数据传递或通信目的。通俗点说&#xff0c;就是连接电脑与移动设备用来传送视频、铃声、图片等文件的通路工具。现在&#xff0c;随着电子行业日新月异的发展&#xff0c;数据线已经成为了我们生活中不可或缺的部分&#xf…

4核8G服务器价格选择轻量还是CVM合适?

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

汇编-间接寻址(处理数组)

直接寻址很少用于数组处理&#xff0c;因为用常数偏移量来寻址多个数组元素时&#xff0c;直接寻址并不实用。取而代之的是使用寄存器作为指针(称为间接寻址(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址&#xff0c; 就称之为间接操作数(indie…

【机器学习10】循环神经网络

1循环神经网络 RNN通过将神经元串行起来处理序列化的数据。 由于每个神经元能用它的内部变量保存之前输入的序列信息&#xff0c;因此整个序列被浓缩成抽象的表示&#xff0c; 并可以据此进行分类或生成新的序列。 2 循环神经网络的梯度消失或梯度爆炸问题 传统的循环神经网…

再学动态规划

先用一张图来理一下动态规划大纲 参考&#xff1a;https://www.zhihu.com/question/291280715/answer/1007691283 动态规划五个步骤 参考&#xff1a;https://www.zhihu.com/question/25814123 ①判断题目能否用动规解法 ②确定状态 最后一步 子问题 ③转移方程 ④确定初始条…

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A-1&#xff1a;登录安全加固&#xff08;Windows, Linux&#xff09;A-2&#…

图像分类系列(四) InceptionV2-V3学习详细记录

前言 上一篇我们介绍了Inception的原始版本和V1版本&#xff1a;经典神经网络论文超详细解读&#xff08;三&#xff09;——GoogLeNet学习笔记&#xff08;翻译&#xff0b;精读代码复现&#xff09; 这个结构在当时获得了第一名&#xff0c;备受关注。但InceptionV1是比较复…