当前位置: 首页 > news >正文

C++ STL基本组成(6大组件+13个头文件)

通常认为,STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的,它们各自的含义如表 1 所示。
表 1 STL 组成结构
STL的组成含义
容器 一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。
算法 STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 <algorithm> 中,少部分位于头文件 <numeric> 中。
迭代器 在 C++ STL 中,对容器中数据的读和写,是通过迭代器完成的,扮演着容器和算法之间的胶合剂。
函数对象 如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。
适配器 可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。
内存分配器 为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。

关于表 1 中罗列的 STL 的构成,初学者简单了解即可,后续章节将专门对它们做系统的深入讲解。

另外,在惠普实验室最初发行的版本中,STL 被组织成 48 个头文件;但在 C++ 标准中,它们被重新组织为 13 个头文件,如表 2 所示。

表 2 C++ STL头文件
<iterator> <functional> <vector> <deque>
<list> <queue> <stack> <set>
<map> <algorithm> <numeric> <memory>
<utility>      

关于这些头文件的作用和用法,本节不做过多赘述,后续章节会做详细介绍。

按照 C++ 标准库的规定,所有标准头文件都不再有扩展名。以 <vector> 为例,此为无扩展名的形式,而 <vector.h> 为有扩展名的形式。

但是,或许是为了向下兼容,或许是为了内部组织规划,某些 STL 版本同时存储具备扩展名和无扩展名的两份文件(例如 Visual C++ 支持的 Dinkumware 版本同时具备 <vector.h> 和 <vector>);甚至有些 STL 版本同时拥有 3 种形式的头文件(例如 SGI 版本同时拥有 <vector>、<vector.h> 和 <stl_vector.h>);但也有个别的 STL 版本只存在包含扩展名的头文件(例如 C++ Builder 的 RaugeWare 版本只有 <vector.h>)。

建议读者养成良好的习惯,遵照 C++ 规范,使用无扩展名的头文件。

http://www.jsqmd.com/news/122414/

相关文章:

  • 前后端分离宠物健康顾问系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 适合老年人吃的饼干选哪家?我给家里长辈挑零食的答案:爱至尊低 GI 五黑饼干 - AIEO
  • 【Open-AutoGLM多弹窗处理终极指南】:揭秘高效叠加弹窗自动化核心技术
  • 【Open-AutoGLM加密密钥管理方案】:揭秘企业级密钥安全管理的5大核心策略
  • HoRain云--深入解析Java线程:从基础到实战
  • FastMCP高级特性之Roots
  • NetSupport Manager 路径遍历漏洞 (CVE-2025-34181) 技术深度解析
  • 基于java+ vue农产投入线上管理系统(源码+数据库+文档)
  • Open-AutoGLM启动超时没人能解?:看老司机如何用日志+火焰图精准定位瓶颈
  • 多层网格漆雾过滤纸:厂商选择与行业洞察 - myqiye
  • 多层网格漆雾过滤纸:优势、选购与靠谱品牌推荐 - mypinpai
  • HoRain云--Dubbo RPC框架:从入门到精通
  • Java SpringBoot+Vue3+MyBatis 扶贫助农系统系统源码|前后端分离+MySQL数据库
  • 8个AI论文工具,助你轻松搞定本科生毕业论文!
  • HoRain云--HTTP报文详解:从请求到响应的全解析
  • LangFlow与Telegram Bot结合打造AI助手机器人
  • 适合办公室吃的健康零食品牌怎么选?我工位常备的 Fixbody(旺旺旗下)真实体验 - AIEO
  • HoRain云--浏览器黑科技:从输入URL到页面渲染全揭秘
  • 12月17号
  • 基于springboot + vue大学生竞赛管理系统(源码+数据库+文档)
  • DrayTek Vigor3910 工业路由器固件解密与逆向分析:CVE-2024-41592/23721漏洞复现
  • 三甲基环己胺泄漏后应急处置,这样做才安全!
  • LangFlow vs 手写代码:哪种方式更适合快速验证AI想法?
  • 基于springboot + vue交友系统(源码+数据库+文档)
  • 为什么你的Open-AutoGLM总是误识别?:三大隐藏陷阱揭秘
  • 秒找文件!Windows 本地搜索神器【Everything】(热门工具 + step-by-step 安装教程)
  • LangFlow能否实现商品评论情感分析?NLP流水线搭建
  • 【毕业设计】SpringBoot+Vue+MySQL +高校线上心理咨询室设计与实现pf平台源码+数据库+论文+部署文档
  • 聚酯树脂清漆泄漏后应急处置
  • Open-AutoGLM弹窗识别优化全攻略(工业级漏检解决方案曝光)