初识STL(标准模板库)

目录

​编辑

什么是STL

STL的版本

 STL的六大组件

如何学习STL

STL的优势

 

STL的缺陷

 



 

⭐什么是STL

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

⭐STL的版本

  • 原始版本
    • Alexander StepanovMeng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意 运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使 用。 HP 版本--所有STL实现版本的始祖。
  • P. J. 版本
    • P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低, 符号命名比较怪异。
  • RW版本
    • Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
  • SGI版本
    • Silicon Graphics Computer SystemsInc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码, 主要参考的就是这个版本。

 ⭐STL的六大组件

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

容器:

容器是用于存储数据的类模板。STL提供了多种不同类型的容器,每种容器都设计用于特定的使用场景,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。

算法:

STL提供了一系列通用算法,这些算法可以作用于容器中的元素。这些算法大多是与容器类型无关的,包括排序、搜索、修改序列、数值运算等。从实现的角度来看,STL算法是一种function tempalte.

迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template

适配器(配接器):适配器是特殊类型的容器,它们提供了不同的接口或行为,基于其他容器实现。

空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.

STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

⭐如何学习STL

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

⭐STL的优势

  1. 高效性

    • STL的数据结构和算法经过精心设计和优化,以保证运行时的高效性。例如,std::vector在尾部添加元素通常是常数时间复杂度,而std::sort算法实现了高效的快速排序算法。
    • 这意味着,在执行时间和资源使用上,STL能够提供出色的性能,这对于需要高效处理大量数据的应用程序来说是非常重要的。
  2. 复用性

    • STL的组件是模板化的,这意味着它们可以用于不同的数据类型,而不需要为每种数据类型重新实现逻辑。
    • 这种设计减少了重复代码,使得开发者能够重用现有的数据结构和算法,加快开发进程并减少错误。
  3. 泛型编程

    • 通过模板,STL支持泛型编程,允许开发者编写独立于特定数据类型的代码。这增加了代码的通用性和灵活性。
    • 泛型编程还意味着,同一套代码可以适用于多种数据类型,从而提高了代码的复用性和可维护性。
  4. 大量的算法

    • STL提供了一系列的标准算法,如排序、搜索、变换等。这些算法可以直接应用于STL容器,极大地提高了开发效率。
    • 这些算法的存在减少了开发者需要手动实现这些常见操作的需要,从而可以专注于解决更具体的问题。

 

⭐STL的缺陷

  1. STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出 来已经相隔了13年,STL才进一步更新。
  2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
  3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
  4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的

____________________

⭐感谢你的阅读,希望本文能够对你有所帮助。如果你喜欢我的内容,记得点赞关注收藏我的博客,我会继续分享更多的内容。⭐

 

  • 35
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值