初识STL

一 、STL的诞生

        在C++发展早期,程序员在不同的项目中需要反复编写相似的数据结构和算法。重复开发带来以下问题:

        代码冗余:每个项目都要重新实现基本数据结构和算法

        维护困难:不同人编写的代码风格不一致,难以维护

        效率低下:不同实现可能导致性能不稳定,难以优化

为了解决这些问题,1994年由Alexander Stepanov领导的团队开发了STL。

二、STL基本概念

  • STL(标准模板库,Standard Template Library)
  • 由多个模块组成,包括容器(Containers)、算法(Algorithms)和迭代器(Iterators),加上一些额外的工具
  • 容器算法之间通过迭代器进行无缝衔接
  • STL几乎所有的代码都采用了模板类或者模板函数

三、 STL核心组件

        STL主要由六大部分组成:容器算法迭代器适配器函数对象配置器

        1.容器(Containers)

                提供多种数据结构,方便存储和管理数据。常见容器包括:

容器类型特点常见容器
序列式容器按照顺序存储数据vector,deque,list,array
关联式容器以键值对存储数据,自动排序set,map,multiset,multimap
无序容器使用哈希表存储数据,查找快unordered_set,unordered_map

        2. 算法(Algorithms)

        提供大量常见算法,如排序、查找、修改等,使用时结合迭代器。
常见算法:

  • 修改类:fill()、replace()、copy()
  • 非修改类:find()、count()
  • 排序类:sort()、stable_sort()
  • 数值类:accumulate()(求和)、inner_produce()(内积)

        3. 迭代器(Iterators)

        用于遍历容器中的元素,类似于指针,但更灵活,适用于STL容器。

迭代器类别适用容器功能
输入迭代器istream_iterator只能读取
输出迭代器ostream_iterator只能写入
前向迭代器forward_list只能前进
双向迭代器list,set,map可前进和后退
随机访问迭代器vector,deque,array可随机访问

        4. 适配器(Adapters)

        用于改变容器、迭代器或函数行为的工具。例如:                                                        

  • 容器适配器(stackqueuepriority_queue)
  • 迭代器适配器(reverse_iterator)
  • 函数适配器(bind()mem_fn())

        5、函数对象(Functors 仿函数)

        是重载的类,可以像函数一样被调用。可作为算法的某种策略。

        6、适配器(Allocators)

        STL提供的内存管理机制,用于分配和释放内存。

四、 STL的特点

  • 泛型编程
  • 高效
  • 模块化
  • 代码复用

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

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

相关文章

DDoS 防护的未来趋势:AI 如何重塑安全行业?

随着网络攻击规模和复杂性的不断升级,分布式拒绝服务(DDoS)攻击已成为企业数字化转型中的一大威胁。传统防御手段在应对智能化、动态化的攻击时逐渐显露出局限性。而人工智能(AI)技术的崛起,正为 DDoS 防护…

【每天一个知识点】深度领域对抗神经网络

Deep Domain Adversarial Neural Network(深度领域对抗神经网络,DDANN) 是一类结合 深度学习 与 领域自适应(domain adaptation) 思想的神经网络结构,主要用于不同数据域之间的知识迁移,尤其是在…

【C语言】深入理解预处理

文章目录一、预定义符号二、#define定义常量:便捷的符号替换常见用法示例:注意事项:三、#define定义宏:带参数的文本替换关键注意点:四、带有副作用的宏参数五、宏替换的规则:预处理的执行步骤重要注意&…

展锐平台(Android15)WLAN热点名称修改不生效问题分析

前言 在展锐Android V项目开发中,需要修改softAp/P2P热点名称时,发现集成GMS后直接修改framework层代码无效。具体表现为: 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法编译烧录后修改不生效 问题根源在…

wsl ubuntu访问(挂载)vmware vmdk磁盘教程

之前使用VMware Workstation 虚拟机跑了个ubuntu,现在改用wsl了, 想把vmware的磁盘挂载到wsl ubuntu。一、磁盘合并我原先的vmware跑的ubuntu存在多个vmdk文件(磁盘文件),需要先将磁盘合并成一个才方便挂载。首先你电脑…

UGUI源码剖析(3):布局的“原子”——RectTransform的核心数据模型与几何学

UGUI源码剖析(第三章):布局的“原子”——RectTransform的核心数据模型与几何学 在前几章中,我们了解了UGUI的组件规范和更新调度机制。现在,我们将深入到这个系统的“几何学”核心,去剖析那个我们每天都在…

c++注意点(15)----设计模式(桥接模式与适配器模式)

一、结构型设计模式两者有点相似,都是为了做到解耦的功能。适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&…

DuoPlus支持导入文件批量配置云手机参数,还优化了批量操作和搜索功能!

作为我常用的一款还不错的跨境工具,DuoPlus云手机帮我高效完成了很多跨境工作,它的功能也在逐步完善和优化,今天来聊聊它最近新更新的一些功能。功能更新一览新增导入文件配置参数:批量初始化代理、批量修改参数支持导入文件一键配…

PLC如何实现通过MQTT协议物联网网关接入管理云平台

在工业4.0与智能制造浪潮下,企业亟需实现设备数据的高效采集与云端协同,以支撑远程监控、预测性维护等场景。工业智能网关凭借其强大的协议解析能力、边缘计算功能及安全传输机制,成为PLC接入云平台的核心解决方案。本文将从技术架构、功能模…

通过sealos工具在ubuntu 24.02上安装k8s集群

一、系统准备(1)安装openssh服务 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墙 sudo ufw allow ssh(3)开通root直接登录 vim /etc/ssh/sshd_config#…

nginx+Lua环境集成、nginx+Lua应用

nginxluaredis实践 概述 nginx、lua访问redis的三种方式: 1。 HttpRedis模块。 指令少,功能单一 ,适合简单的缓存。只支持get 、select命令。 2。 HttpRedis2Module模块。 功能强大,比较灵活。 3。 lua-resty-redis库 OpenResty。…

机器学习 K-Means聚类 无监督学习

目录 K-Means 聚类:从原理到实践的完整指南 什么是 K-Means 聚类? 应用场景举例 K-Means 算法的核心原理 K-Means 算法的步骤详解 可视化理解 K-Means 的优缺点分析 优点 缺点 如何选择合适的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面试精讲 Day 16:生产者优化策略与实践

【RabbitMQ面试精讲 Day 16】生产者优化策略与实践 开篇 欢迎来到"RabbitMQ面试精讲"系列第16天,今天我们聚焦RabbitMQ生产者优化策略与实践。在消息队列系统中,生产者的性能表现直接影响整个系统的吞吐量和可靠性。掌握生产者优化技巧不仅能…

Android 系统的安全 和 三星安全的区别

维度Android(AOSP 通用)Samsung(Knox 强化)本质差异一句话信任根标准 Verified Boot(公钥由谷歌或 OEM 托管)额外在 自家 SoC 里烧录 Knox 密钥 熔丝位,一旦解锁即触发 Knox 0x1 熔断&#xff…

开源大模型实战:GPT-OSS本地部署与全面测评

文章目录一、引言二、安装Ollama三、Linux部署GPT-OSS-20B模型四、模型测试4.1 AI幻觉检测题题目1:虚假历史事件题目2:不存在的科学概念题目3:虚构的地理信息题目4:错误的数学常识题目5:虚假的生物学事实4.2 算法题测试…

【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制

命名管道(Named Pipe)是一种在操作系统中用于进程间通信(IPC) 的机制,它允许不相关的进程(甚至不同用户的进程)通过一个可见的文件系统路径进行数据交换。与匿名管道(仅存在于内存&a…

Baumer相机如何通过YoloV8深度学习模型实现危险区域人员的实时检测识别(C#代码UI界面版)

《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号 项目名称 项目名称 1 1.工业相机 + YOLOv8 实现人物检测识别:(C#代码,UI界面版) 2.工业相机 + YOLOv8 实现PCB的缺陷检测:(C#代码,UI界面版) 2 3.工业相机 + YOLOv8 实现动物分类识别:(C#代码,U…

本文章分享一个本地录音和实时传输录音给app的功能(杰理)

我用的是杰理手表sdk,该功能学会就可自行在任何杰里sdk上做,库函数大致一样,学会运用这个方向就好。1.我们要验证这个喇叭和麦是否正常最简单的的办法,就是直接万用表测试,直接接正负极,看看是否通路&#…

Netty-Rest搭建笔记

0.相关知识Component、Repository、ServiceRepository //Scope设置bean的作用范围 Scope("singleton")//单例 prototype每次创建都会给一个新实例。 public class BookDaoImpl implements BookDao { //生命周期public void save() {System.out.println("book d…

工作笔记-----lwip网络任务初始化问题排查

工作笔记-----基于FreeRTOS的lwIP网络任务初始化问题排查 Author:明月清了个风Date: 2025/8/10PS:新项目中在STMF7开发板上基于freeRTOS和lwIP开发网口相关任务,开发过程中遇到了网口无法连接的问题,进行了一系列的排查…