C++重点---STL简介

news2024/11/17 15:28:12

顾得泉:个人主页

个人专栏:《Linux操作系统》 《C++从入门到精通》  《LeedCode刷题》

键盘敲烂,年薪百万!


一、STL简介

       STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一套丰富的通用数据结构和算法模板。STL的设计目标是提供高效、可复用的数据结构和算法,以便开发人员能够更加方便地进行程序开发。


二、STL版本

1.原始版本

       Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。

2.P. J. 版本

       由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

3.RW版本

       由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。

4.SGI版本

       由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码,主要参考的就是这个版本。


三、STL的六大组件

       STL包含了六大组件,分别是容器(Containers)、算法(Algorithms)、迭代器(Iterators)、函数对象(Function Objects)、适配器(Adapters)和分配器(Allocators)。

注:各版本名称有所差异。

       1.容器(Containers):容器是STL中用于存储和管理数据的类模板。STL提供了多种容器,如向量(vector)、链表(list)、双端队列(deque)、集合(set)、映射(map)等。每种容器都有自己的特点和适用场景,可以根据需求选择合适的容器。

       2.算法(Algorithms):算法是STL中用于对容器中的数据进行操作和处理的函数模板。STL提供了大量的算法,包括排序、查找、遍历、变换等。这些算法可以直接应用于各种容器,使得开发者能够方便地进行数据处理和计算。

       3.迭代器(Iterators):迭代器是STL中用于遍历容器元素的对象。迭代器提供了一种统一的访问容器元素的方式,使得算法可以独立于具体容器实现。STL提供了多种类型的迭代器,如输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,每种迭代器都有不同的功能和限制。

       4.函数对象(Function Objects):函数对象是STL中用于封装函数行为的对象。STL中的算法通常通过函数对象来完成具体的操作,函数对象可以是普通函数指针、函数对象类或者Lambda表达式。函数对象可以作为算法的参数,使得算法具有更大的灵活性和可扩展性。

       5.适配器(Adapters):适配器是STL中用于改变容器接口或算法行为的类模板。STL提供了多种适配器,如栈(stack)、队列(queue)、优先队列(priority_queue)等。适配器可以将容器或算法进行封装和调整,以满足特定的需求。

       6.分配器(Allocators):分配器是STL中用于管理内存分配和释放的类模板。STL提供了默认的分配器,也支持自定义分配器。分配器可以控制容器的内存分配策略,如内存池管理、对齐方式等,以提高性能和灵活性。


四、STL的重要性

       网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

       面试中经常会对于STL进行考察:(面经来源于网络)

       笔试中也会出现:

                二叉数层序打印
                重建二叉树
                两个栈实现一个队列


五、如何学习STL

推荐一本书:《The C++ Standard Library》

简单总结一下:学习STL的三个境界:能用,明理,能扩展 。

如同我们学习走路:先学爬,后会走,才能跑!


六、STL的缺陷

       STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。

       STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。

       STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。

       STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。


结语:C++关于STL简介的分享到这里就结束了,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言,最后祝大家新的一年里学业有成,天天开心~~~ 

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

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

相关文章

8 easy 14. 最长公共前缀

纵向扫描法: //编写一个函数来查找字符串数组中的最长公共前缀。 // // 如果不存在公共前缀,返回空字符串 ""。 // // // // 示例 1: // // //输入:strs ["flower","flow","flight"…

Keras 3.0发布:全面拥抱 PyTorch!

Keras 3.0 介绍 https://keras.io/keras_3/ Keras 3.0 升级是对 Keras 的全面重写,引入了一系列令人振奋的新特性,为深度学习领域带来了全新的可能性。 多框架支持 Keras 3.0 的最大亮点之一是支持多框架。Keras 3 实现了完整的 Keras API,…

面试笔记系列八之JVM基础知识点整理及常见面试题

类实例化加载顺序 加载:当程序访问某个类时,JVM会首先检查该类是否已经加载到内存中。如果尚未加载,则会进行加载操作。加载操作将类的字节码文件加载到内存,并为其创建一个Class对象。 连接(验证、准备、解析&#x…

Qt程序设计-指南针自定义控件实例

本文讲解Qt指南针自定义控件实例。 效果演示 创建指南针类 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QWidget> #include <QTimer> #include <QPainter> #include <QPen> #include <QDebug> #include <QtMat…

【MATLAB】REMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 REMD_MFE_SVM_LSTM神经网络时序预测算法是一种结合了REMD&#xff08;Reservoir Enhanced Multi-scale Deep Learning&#xff09;算法、多尺度特征提取&#xff08;MFE&#xff09;、支持…

许多主要新闻媒体正屏蔽 OpenAI 爬虫

自OpenAI的内容生成式人工智能模型面世以来&#xff0c;大量互联网数据成为了不断训练和优化模型的“饵料”&#xff0c;但据路透社研究所的一项调查&#xff0c;有越来越多的新闻媒体已对OpenAI的数据爬取说“不”&#xff0c;在传统媒体领域&#xff0c;这一比例甚至超过了50…

数仓模型设计方法论

在当今大数据时代&#xff0c;数据已经成为企业最重要的资产之一。而数据仓库作为企业数据管理和分析的核心基础设施&#xff0c;其设计方法论对于企业的数据治理和决策分析至关重要。本文将探索数仓模型设计的方法论&#xff0c;帮助读者更好地理解和应用数仓模型设计。 一、…

仿牛客网项目---社区首页的开发实现

从今天开始我们来写一个新项目&#xff0c;这个项目是一个完整的校园论坛的项目。主要功能模块&#xff1a;用户登录注册&#xff0c;帖子发布和热帖排行&#xff0c;点赞关注&#xff0c;发送私信&#xff0c;消息通知&#xff0c;社区搜索等。这篇文章我们先试着写一下用户的…

EAP-TLS实验之Ubuntu20.04环境搭建配置(FreeRADIUS3.0)(四)

该篇主要介绍了利用配置ca.cnf、server.cnf、client.cnf在certs路径下生成证书文件&#xff08;非执行bootstrap脚本&#xff0c;网上也有很多直接通过openssl命令方式生成的文章&#xff09;&#xff0c;主要参考&#xff08;概括中心思想&#xff09;官方手册&#xff0c;以及…

2024年阿里云2核4G配置服务器测评_ECS和轻量性能测评

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

安卓之ContentProvider的应用场景以及优劣分析

摘要 本文旨在对Android开发中的ContentProvider进行深入探讨。ContentProvider是Android系统中四大组件之一&#xff0c;主要用于在不同的应用程序之间共享数据。本文首先对ContentProvider进行概述&#xff0c;然后分析其应用场景&#xff0c;接着对其优势和劣势进行分析&…

简单模板2(HTML)

紧接上回&#xff0c;简单模板2又来了&#xff0c;喜欢赶紧点个赞吧&#xff0c;希望大家喜欢&#xff01; 效果图&#xff1a; CODE&#xff1a; <!DOCTYPE html> <html> <head><title>我的第一个网页</title> </head> <body><…

微信小程序订阅消息前后端示例

微信小程序的订阅消息&#xff0c; 必须是由弹框&#xff0c;弹框&#xff0c;弹框来调起了&#xff0c;单纯的在页面上调用 wx.requestSubscribeMessage是没有效果的 小程序端的代码 <view class"sub" bindtap"dinyuxiaoxi">订阅消息</view>…

【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录 资源SDXL-Lightning 论文 资源 SDXL-Lightning论文&#xff1a;https://arxiv.org/abs/2402.13929 gradio教程&#xff1a;https://blog.csdn.net/qq_21201267/article/details/131989242 SDXL-Lightning &#xff1a;https://huggingface.co/ByteDance/SDXL-Light…

SpringCloud Eureka(注册中心)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

sql基本语法+实验实践

sql语法 注释&#xff1a; 单行 --注释内容# 注释内容多行 /* 注释内容 */数据定义语言DDL 查询所有数据库 show databases;注意是databases而不是database。 查询当前数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符…

Qt中关于信号与槽函数的思考

信号与槽函数的思考 以pushbutton控件为例&#xff0c;在主界面上放置一个pushbutton控件&#xff0c;点击右键选择关联槽函数&#xff0c;关联一个click函数&#xff0c;如下图所示&#xff1a; 在该函数中&#xff0c;实现了一个点击pushbutton按钮后&#xff0c;弹出一个窗…

复制策略深入探讨

在之前的博客中&#xff0c;我们讨论了复制最佳实践和不同类型的复制&#xff0c;例如批量、站点和存储桶。但是&#xff0c;随着所有这些不同类型的复制类型的出现&#xff0c;人们不得不想知道在哪里使用哪种复制策略&#xff1f;从现有 S3 兼容数据存储迁移数据时&#xff0…

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片&#xff0c;可以快速出图&#xff0c;无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…

借助 Aspose.Words,使用 C#、Java、Python 和 C++ 创建 Word 文档

以编程方式创建和操作 Word 文档是许多应用程序的常见要求。幸运的是&#xff0c;有各种编程语言的强大库可以简化此任务。Aspose.Words 就是此类多功能解决方案之一&#xff0c;它是强大的 API&#xff0c;使开发人员能够无缝生成、修改和转换 Word 文件。在这篇博文中&#x…