STL的故事

什么是STL


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

STL的优点包括高效性、可复用性和标准化。它提供了经过优化的数据结构和算法实现,能够提高程序的执行效率。同时,STL的模板类和函数具有通用性,可以适用于不同类型的数据,提高了代码的可复用性。另外,STL是C++标准库的一部分,得到了广泛的应用和标准化,使得开发者能够更加方便地使用和学习。

STL的版本


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

STL(Standard Template Library)的六大组件包括:

  1. 容器(Containers):容器是用于存储和管理数据的类模板。STL提供了多种容器,如向量(vector)、链表(list)、队列(queue)、栈(stack)、映射(map)等。容器提供了不同的数据结构和操作方式,以满足不同的需求。

  2. 算法(Algorithms):算法是对容器中的数据进行处理和操作的函数模板。STL提供了丰富的算法库,包括排序、查找、变换、合并等常用算法。这些算法可以直接应用于容器,使得开发者能够快速实现各种数据处理任务,而无需手动编写复杂的算法代码。

  3. 迭代器(Iterators):迭代器用于在容器中遍历元素,并提供了统一的接口,使得算法可以独立于具体的容器实现。STL的迭代器模型非常灵活,支持多种迭代方式,如正向迭代、反向迭代、随机访问等。迭代器可以将容器的元素视为一个序列,从而实现对容器的遍历和访问。

  4. 函数对象(Function Objects):函数对象是可调用对象的抽象,它可以像函数一样被调用。STL中的很多算法和容器都支持函数对象作为参数,使得开发者能够以一种更灵活的方式定义自己的操作。函数对象可以通过重载函数调用运算符(operator())来实现,也可以使用预定义的函数对象,如加法、乘法等。

  5. 适配器(Adapters):适配器用于将一种容器或迭代器的接口转换为另一种接口,从而使得它们能够互相配合使用。STL提供了多种适配器,如栈适配器(stack adapter)、队列适配器(queue adapter)和优先队列适配器(priority queue adapter)等。适配器可以在不改变容器或迭代器的基础上,改变其行为或接口,以满足特定的需求。

  6. 分配器(Allocators):分配器用于动态分配和释放内存,是容器的底层内存管理机制。STL的容器可以使用不同的分配器,以实现自定义的内存分配策略。分配器可以控制容器的内存分配和释放过程,提高内存管理的效率和灵活性。

STL的缺陷


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值