STL库简介

一、STL库的概念

STL:是C++标准库的重要追组成部分,不仅是一个可以复用的组件库,而且还是一个包含了数据结构和算法的软件框架

二、STL的版本

  • 原始版本
    Alexander Stepanov、 Meng Lee 在惠普实验室完成的原始版本, 是一个开源版本,允许任何人任意运用、拷贝、修改、传播、商业化的使用这些代码,无需付费。仅仅要求向原始版本一样做开源使用,HP版本 -- 所有STL实现版本的始祖版本。
  • P.J版本
    由P.J.Plauger开发,继承自HP版本,被Windows VisualC++采用,不能公开或者修改,缺点是可读性比较低,并且符号命名比较怪异。
  • RW版本
    由Rouge Wage公司开发,也是继承自HP版本, 被C++ Builder采用,不能公开和修改,可读性也不太高。
  • SGL版本
  • 由Silicon Graphics Computer Systems , inc公司开发, 继承自HP版本,被Linux系统的g++/gcc采用,可移植性高,公开并且可以修改甚至贩卖, 从命名风格和编程风格上看,可读性比较高。

三、STL的六大组件

stl的六大组件分别是:仿函数,算法,迭代器,空间配置器(本质是内存池),容器以及配接器。

具体如下所示:

  • 容器(containers):各种数据结构,如 vector,list,deque,set,map等。从实现的角度来看,容器是一种 class template。
  • 算法(algorithms):各种常用算法,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作,比如 sort,search,copy,erase。从实现的角度来看,STL算法是一种 function template。
  • 迭代器(iterators):迭代器用于遍历对象集合的元素,扮演容器与算法之间的胶合剂,是所谓的泛型指针,共有5种类型,以及其他衍生变化。从实现角度来看,迭代器是一种将 operator*,operator->,operator++,operator--等指针操作予以重载的 class template。所有的STL容器附带有自己专属的迭代器,因为只有容器设计者才知道如何遍历自己的元素。
  • 仿函数(functors):行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了 operator() 的 class 或者 class template。
  • 配接器(Adaptor):一种用来修饰容器或者仿函数或迭代器接口的东西。例如 STL 提供的queue 和 stack,就是一种空间配接器,因为它们的底部完全借助于 deque。
  • 空间配置器(allocator):负责空间的配置与管理。从实现的角度来看,配置器是一个实现了动态配置空间、空间管理、空间释放的 class template。

四、STL的重要性

一般在面试和笔试中很容易遇到关于STL的相关问题。

在工作中,我们也会经常用到C++的STL库,STL是C++中的优秀作品,正是因为有了STL库我们对于有些数据结构就不用重新造轮子,帮助我们快速的进行开发。

五、STL库的一些缺点

1.STL库的更新速度较慢,上一版靠谱的是C++98,C++03做了一些修订,C++11出现后已经隔了13年才进一步进行更新。

2.STL一直到现在都没有支持线程安全,并发环境下需要我们自己进行加锁,且锁的力度比较大。

3.STl极度追求效率,导致内部过于复杂,比如类型萃取和迭代器萃取。

4.STL使用会有代码膨胀的问题,可能会因为模板的语法问题导致生成多份代码。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凪よ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值