【C++】STL基本介绍

news2025/2/12 23:47:35

目录

1、什么是STL

2、STL六大组件

2.1容器

2.2算法

2.3迭代器


1、什么是STL

概念:

STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

通俗来说:STL就是将常见的数据结构(例如 顺序表,链表,栈,队列,二叉树,哈希...)以模板的形式进行封装,使用时,不用我们人为再去写,可以直接调用。并且包含常见的通用的泛型算法(一些常规的算法也不用自己实现,可以直接调用)。

STL从广义上分为:容器(container),算法(algorithm),迭代器(iterator),容器和算法之间通过迭代器进行无缝连接,STL几乎所有的代码都采用了模板类或模板函数

通用的泛型算法两大特性:

通用的:对于任意类型的数据结构都可以处理。(线性表,链表,二叉树....)

模板实现:以模板的方式实现,对于任意数据类型都可以处理。(int/double/short/long.....)

2、STL六大组件

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

2.1容器

来自百度百科的解释

容器是指用以容纳物料并以壳体为主的基本装置。常用作储存设备或其他化工设备的外壳。主要由壳体、封头、接管、法兰和支座组成。对容器的基本要求是:满足工艺需要;保证操作安全,包括具有足够的强度、刚度以及密封性;耐腐蚀,具有一定的使用寿命;便于制造、安装、维修和使用;成本低,材料节省,尤其要节约不锈钢和有色金属等贵重材料。容器在化工生产中应用广泛,按压力分有真空、常压、外压的压力容器,压力容器又可分低压、中压、高压及超高压容器;按温度分有常温、低温及高温容器;按筒体结构分有单层容器和多层容器;按工艺用途分有储存、分离、反应及换热容器;按厚度分有薄壁和厚壁容器。

STL中的容器就是将运用最为广泛的一些数据结构实现出来,常用的数据结构:数组,链表,树,栈,队列,集合,映射表等。

容器分为序列式容器关联式容器两种。

序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置

  • string:动态类型的顺序表----只能存储字符----字符串
  • vector :动态类型顺序表
  • array :   静态类型顺序表
  • list:带头结点双向循环链表

关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

  • ...

2.2算法

来自百度百科的解释

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。

形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。

STL中的算法分为质变算法非质变算法

质变算法:运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等等

  • copy
  • swap
  • replace
  • fill
  • remove
  • permulation
  • partition
  • sort
  • ...

非质变算法:运算过程中不会更改区间内的元素内容,例如查找,计数,遍历,寻找极值等等

  • find
  • search
  • count
  • equal
  • max
  • min
  • ...

2.3迭代器

来自百度百科的解释

迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。

迭代器是容器和算法之间的粘合剂,每个容器都有自己专属的迭代器。

种类

功能

输入迭代器

对数据的只读访问

输出迭代器

对数据的只写访问

前向迭代器

读写操作,并能向前推进迭代器

双向迭代器

读写操作,并能向前和向后操作

随机访问迭代器

读写操作,可以以跳跃的方式访问任意数据,功能最强的迭代器

常用的容器中迭代器种类为双向迭代器随机访问迭代器

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

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

相关文章

重回游戏公平,向游戏打金工作室宣战!

什么是打金工作室? 近几年中国游戏市场持续发展,国产自研精品游戏层出不穷,游戏产业精品化、高质量健康发展趋势稳定。根据中国音数协游戏工委(GPC)与中国游戏产业研究院发布的《2022年中国游戏产业报告》显示&#xf…

总结2023开放原子全球开源峰会,中兴国产操作系统的开源贡献

近年来,随着信息技术的不断发展,催生出越来越多的智能场景,作为信息产业的底层技术,国产操作系统所面临的问题也变得越来越复杂。面对新技术和新场景对国产操作系统提出的新挑战、新要求,如何凝聚生态合作伙伴的优势力…

看了这几个C语言例子,你一定和我一样连说5个卧槽,声音一次比一次大

曾经我一直以为自己C语言学的还挺好的&#xff0c;直到看到这几个例子。 例1 首先来看一下&#xff0c;大师是如何求圆周率的&#xff0c;一口君实在词穷&#xff0c;first卧槽。 #include <stdio.h>long a10000,b0,c10000,d,e,f[10001],g;void main(){for(;b ! c; f[…

Rust 基础语法

Rust 基础语法 变量&#xff0c;基本类型&#xff0c;函数&#xff0c;注释和控制流&#xff0c;这些几乎是每种编程语言都具有的编程概念。 这些基础概念将存在于每个 Rust 程序中&#xff0c;及早学习它们将使你以最快的速度学习 Rust 的使用。 变量 首先必须说明&#x…

AIAgent来了!AutoGPT的新对手

AutoGPT 和 AgentGPT遇到了更强的对手&#xff0c;我来介绍一下 http://AIAgent.app 这个网站。 http://AIAgent.app 是一个可以让你使用人工智能代理来完成各种任务的网站。你只需要设置一个目标&#xff0c;然后选择一个合适的代理&#xff0c;它就会自动为你执行任务&#…

LED显示屏薄膜类型有哪些

LED显示屏薄膜是指应用在LED显示屏的薄膜材料&#xff0c;用于保护LED模块和增强显示效果。以下是LED显示屏薄膜知识的详细说明&#xff1a; 防护膜&#xff08;Protective Film&#xff09;&#xff1a;防护膜是一层透明的薄膜材料&#xff0c;常用于覆盖在LED显示屏的正面&am…

Android 手机自动化测试工具有哪几种?

文章大纲&#xff1a; 1、Android手机自动化测试工具&#xff0c;常用的有这7种 2、化繁为简&#xff0c;补充移动端自动化测试工具 3、这么多工具&#xff0c;工作中该如何选择 4、掌握自动化测试工具的学习建议 一、Android手机自动化测试工具&#xff0c;常用的有这7中&…

退休大厂软件测试面试官给大家的一些建议

最近因为又要增加用人&#xff0c;就又开始忙于招聘&#xff0c;一段时间下来遇到不少有趣的事情&#xff0c;结合之前的面试经验&#xff0c;就简单记录一下。 火眼金睛&#xff1a;识别真假 为什么一开始要说这个&#xff0c;因为最近确实遇到很多编造的简历&#xff0c;给…

如何选择到最合适的DDoS缓解服务?

DDoS缓解服务提供商的数量可能很多&#xff0c;但只有一些提供商提供高效服务的所有必要功能&#xff0c;因此如果要选择正确的 DDoS保护解决方案&#xff0c;必须考虑以下因素&#xff1a; 1.缩小风险范围 选择DDoS缓解服务的第一步&#xff0c;确定您组织的特定需求&#…

DDoS缓解的基本工作原理和关键功能

什么是DDoS缓解&#xff1f; DDoS 缓解是指成功保护目标服务器或网络以抵御分布式拒绝服务 (DDoS) 攻击的过程&#xff0c;目标受害者可以使用专门设计的网络设备或基于云的保护服务缓解传入的威胁。 为什么需要DDoS缓解解决方案&#xff1f; 由于网络构成的基本逻辑&#xf…

Virt-Mnager 虚拟机桥接网络

前言 以下针对linux 下 virt-manager 管理kvm虚拟机配置网络类型&#xff0c;默认为nat。 nat网络模式&#xff0c;虚拟机之间可通信&#xff0c;虚拟机和主机可通信&#xff0c;不可与主机外的网络通信&#xff1b; 桥接网络模式&#xff0c;虚拟机之间可通信&#xff0c;虚拟…

Bluez 的一些概念

目录 1&#xff0c;Linux 和蓝牙架构 2&#xff0c;D-Bus 相关概念 2.1 Message Buses 2.2 Client, Server and Connections 2.3 Object, Interface, Methods, Signals and Properties 2.3.1 Object, Interface, Methods 2.3.2 Signal 2.3.3 Properties 3&#xff0c;St…

光速上手matlab入门级学习必看matlab超长细练习matlab,福利分享Matlab全套资料

福利&#xff1a;末文有Matlab全套哦 实践是检验知识和技能的唯一标准。只有将所学的知识应用到实际问题中&#xff0c;并通过实践不断地调整和完善&#xff0c;才能真正掌握和理解这些知识。 在 MATLAB 中&#xff0c;可以通过编写代码、运行程序、调试错误等方式进行实践。…

大语言模型高质量提示词最佳实践

大语言模型高质量提示词最佳实践 一、提供更清晰的指令 使用大语言模型&#xff08;类似ChatGPT、Bard等工具&#xff09;的过程中&#xff0c;一个关键的技巧是能够给出清晰和明确的指令。大语言模型的运作方式是根据提供的输入&#xff0c;预测接下来应该生成什么内容。因此…

Mysql经典例题练习与总结

一、创建数据表并插入数据 -- 1、学生表 -- Student(s_id,s_name,s_birth,s_sex) &#xff1a;学生编号、姓名、年月、性别 CREATE TABLE IF NOT EXISTS Student (s_id VARCHAR (20),s_name VARCHAR (20) NOT NULL DEFAULT ,s_birth VARCHAR (20) NOT NULL DEFAULT ,s_sex VAR…

使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此&#xff0c;我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频&#xff0c;也可以阅读接下来本篇的图文教…

动态规划dp —— 25.单词拆分

1.状态表示 是什么&#xff1f;dp表中里的值所表示的含义就是状态表示 dp[i]表示&#xff1a;[0,i]区间内的字符串&#xff0c;能否被字典中的单词拼接而成&#xff08;存ture或false&#xff09; 2.状态转移方程 dp[i] 等于什么 根据最后一个位置&#xff0c;来划分问题&a…

easyPOI导出多Sheet

easyPOI导出多Sheet 声明&#xff0c;本文基于JAVA操作Excel&#xff08;POI、easyPOI、easyExcel_我认不到你的博客-CSDN博客讲解&#xff0c;需要基础的可以看这篇&#xff0c;特别是Excel注解 本篇最后有工具类和自定义的注解类&#xff0c;只需要傻瓜式复制粘贴应该就可以用…

与 NGINX 团队直接交流 | 微服务之月火热报名中

原文作者&#xff1a;NGINX 原文链接&#xff1a;与 NGINX 团队直接交流 | 微服务之月火热报名中 转载来源&#xff1a;NGINX 官方网站 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 又是一个热情似火的六月&#xff0c;一年一度的 Microservices June 微服务之月再…

6.12 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

目录 system V IPC 共享内存 共享内存使用步骤 system V IPC -key system V IPC -ftok system V IPC -ftok-示例 共享内存创建-shmget 共享内存创建-shmget-示例1 共享内存创建-shmget-示例2 共享内存映射-shmat 共享内存读写 - 示例 共享内存撤销映射 - shmdt 共享…