STL学习:STL基本组成

通常认为,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++ 规范,使用无扩展名的头文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL是C++标准模板库(Standard Template Library)的简称。它是C++的一个重要组成部分,提供了一系列的通用模板类和函数,用于处理常见的数据结构和算法问题。 学习C++ STL有以下几个方面的好处: 1. 提高开发效率:STL提供了大量现成的数据结构和算法,比如向量(vector)、链表(list)、队列(queue)、堆栈(stack)等,以及排序、查找、计数、遍历等算法。使用STL可以避免重复造轮子的过程,通过简单的调用就可以快速编写高效的代码,提高开发效率。 2. 提高代码质量:STL是由专业的C++程序员设计和实现的,其设计遵循了面向对象的思想,并使用了模板元编程等技术。使用STL可以提高代码的模块化程度,减少重复代码,使代码更加清晰、简洁和可维护。 3. 为学习其他编程语言打下基础:STL采用了一种通用、抽象的设计,其思想和理念对于学习其他编程语言也是有借鉴意义的。通过学习STL,可以更好地理解数据结构和算法的设计与实现,为学习其他编程语言打下坚实的基础。 要学习C++ STL,可以从以下几个方面入手: 1. 理解STL组成部分:了解STL组成部分,包括容器(container)、迭代器(iterator)、算法(algorithm)、函数对象(function object)、适配器(adapter)等。理解它们之间的关系和作用,掌握各个组成部分的用法和特点。 2. 学习STL的常用容器和算法:熟悉STL提供的常用容器和算法,如向量(vector)、链表(list)、队列(queue)、堆栈(stack)等,以及排序、查找、计数、遍历等算法。了解其基本的操作和用法,掌握它们的时间复杂度和使用场景。 3. 理解STL内部实现原理:了解STL内部的实现原理,包括对容器和算法的底层实现,例如迭代器的实现、算法的实现方式和优化等。理解这些原理有助于更好地理解和使用STL,以及优化代码性能。 总之,学习C++ STL对于提高C++编程能力和开发效率非常重要。通过学习STL,可以更好地掌握C++的数据结构和算法,提高代码质量和可维护性,为进一步学习和应用其他编程语言打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值