C++--STL总结

参考教程:黑马程序员匠心之作|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迭代器

迭代器可以当成指针。当成指针使用即可。

我们最常使用的就是使用迭代器来进行遍历

    // 使用迭代器进行遍历
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        cout << *it << " ";
    }

容器中的begin()方法返回的是指向第一个元素的迭代器,end()方法是指向最后一个元素的迭代器。

C++11引入了智能指针,可以自动识别指针类型,所以上面的遍历可以用一种更简便的方法书写。

    // 使用迭代器进行遍历
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        cout << *it << " ";
    }

六.STL函数对象与仿函数

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

1.概念

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

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

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

2.特点

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

3.内建函数对象

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开关电源测试之输出暂态响应测试标准及方法详解

暂态响应是指在接收到输入信号后&#xff0c;输出信号在短时间内产生的变化。开关电源输出暂态响应测试是为了检测输出负载快速变化时&#xff0c;输出电压跟随变动的稳定性。 开关电源输出暂态响应怎么测试&#xff1f; 测试目的&#xff1a;测试S.M.P.S.输出负载快速变化时&a…

python django 小程序点餐源码

开发工具&#xff1a; PyCharm mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 微信小程序 代码注释齐全&#xff0c;没有多余代码&#xff0c;适合学习(毕设)&#xff0c;二次开发&#xff0c;包含论文技术相关文档。 功能介绍&#xff1a…

视百年眼科青少年近视防控中心正式启动,构建近视防控新格局

11月16日上午&#xff0c;广州视百年眼科青少年近视防控中心启动仪式在门诊顺利举行。视百年眼科董事长孙联合、技术院长李国保、视光中心负责人肖萧、视光主任刘得圳出席会议并对如何做好青少年近视防控工作作出了工作部署。 视百年眼科孙董事长在会上强调&#xff0c;青少年是…

什么是单域名SSL安全证书?

单域名证书是什么&#xff1f; 单域名证书是指只包含一个具体域名的SSL/TLS证书&#xff0c;它可以用于保护单个主机名的HTTPS通信。例如&#xff0c;如果您有一个网站http://www.example.com&#xff0c;则单域名证书将仅为该域名颁发。 这种证书在保护单个域的安全方面很有…

C++多态原理揭秘

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

天猫精灵/小爱同学+巴法云+Openwrt控制局电脑/群晖开关机

天猫精灵/小爱同学巴法云Openwrt控制局电脑/群晖开关机 事情的起因实战环境开始发车1.天猫精灵/小爱同学 连接 八法云 2.openwrt3.docker环节注意:sshpass 要先使用 ssh命令登陆一下你要唤醒或者远程关机的设备,不然可能因为一个登陆提示你是否登陆的yes/no导致程序没有反应,然…

任正非说:公司要逐步实行分灶吃饭,我们在管理上不能过于整齐划一,否则缺少战斗力。

你好&#xff01;这是华研荟【任正非说】系列的第42篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、我们必须在混沌中寻找战略方向。规划就是要抓住机会点&#xff0c;委员会是火花荟萃的地方&#xff0c;它预研的方向是可做…

ESP32 MicroPython LCD显示实验⑤

ESP32 MicroPython LCD显示实验⑤ 1、实验目的2、实验平台3、实验内容4、参考代码5、实验结果 1、实验目的 LCD显示屏显示中英文字符、显示图片 2、实验平台 智能小车(配备显示屏) 3、实验内容 小车配有2.0寸的TFT彩屏&#xff0c;内置有中文GBK字库&#xff0c;可以显示中…

值得你一生收藏的BMW宝马汽车底盘代号各个版本说明,方便今后查阅使用!

很少有汽车品牌像宝马一样&#xff0c;本属于内部交流使用的底盘代号&#xff08;Development Code&#xff09;&#xff0c;最终延伸为粉丝群体用以精准定位某一年代某一款车型的通用语。随着宝马加速推出新产品&#xff0c;每一年的底盘代号都在更新。你挚爱的强哥现将宝马所…

echarts 三角锥形柱状图 + 带阴影的折线图示例

该示例有如下几个特点&#xff1a; ①三角锥形折线图 ②折线图自带阴影 ③三角锥形鼠标放置时颜色改变 ④数据随着鼠标移动而展示 ⑤鼠标放置时tooltip样式自定义&#xff08;echarts 实现tooltip提示框样式自定义-CSDN博客&#xff09; 代码如下&#xff1a; this.options …

鸿蒙ToastDialog内嵌一个xml页面会弹跳到一个新页面《解决》

ToastDialog 土司组件 1.问题展示2.代码展示3.问题分析 1.问题展示 0.理想效果 错误效果: 1.首页展示页面 (未点击按钮前) 2.点击按钮之后&#xff0c;弹窗不在同一个位置 2.代码展示 1.点击按钮的 <?xml version"1.0" encoding"utf-8"?> <…

HTTP1.0协议详解

前言主要特点存在的不足与HTTP1.1的区别在Java中应用HTTP1.0协议知识拓展 前言 HTTP是由蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;爵士创造的。他在1989年提出了一个构想&#xff0c;借助多文档之间相互关联形成的超文本&#xff08;HyperText&#xff09;&#x…

[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案

原文&#xff1a;[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案 一飞开源&#xff0c;介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术&#xff0c;一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区&#xff0…

keepalived离线安装

上传离线安装包 将离线安装包拖动到服务器上 进入到离线安装包路径&#xff0c;执行下面脚本进行安装 rpm -Uvh --force --nodeps *.rpm

C++初级项目-webserver(1)

1.引言 Web服务器是一个基于Linux的简单的服务器程序&#xff0c;其主要功能是接收HTTP请求并发送HTTP响应&#xff0c;从而使客户端能够访问网站上的内容。本项目旨在使用C语言&#xff0c;基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接…

CF1899A Game with Integers(思维题)

题目链接 题目 题目大意 t 组测试样例 每组给一个正整数 n&#xff0c; 有两种操作&#xff1a; 1-1 A 和 B 轮流操作&#xff0c; 如果这个整数变成了一个能被3整除的数&#xff0c;A赢&#xff0c;输出First 如果在10次操作以内&#xff0c;n不能被3整数&#xff0c;B赢&…

TCP与UDP协议

TCP与UDP协议 1、TCP协议&#xff1a; 1、TCP特性&#xff1a; TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中&#xff0c;仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和&#xff0c;确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个&#xff1f;不考虑多物体提交。障碍物&#xff0c;尽可能选择状态发生变化的物体。如果没有明显变化的&#xff0c;则考虑周边的物体。车的状态最后趋于减速、停止&#xff0c;时序…

OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍

1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别&#xff08;ASR&#xff0c;Automatic Speech Recognition&#xff09;模型&#xff0c;他们通过从网络上收集了 68 万小时的多语言&#xff08;98 种语言&#xff09;和多任务&#xff08;multitask&am…

Windows11怎样投屏到电视上?

电视屏幕通常比电脑显示器更大&#xff0c;能够提供更逼真的图像和更震撼的音效&#xff0c;因此不少人也喜欢将电脑屏幕投屏到电视上&#xff0c;缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视&#xff1f; 你需要在电脑和电视分贝安装AirDroid Cast的电…