跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 跨境学堂 > 初识STL(标准模板库)

初识STL(标准模板库)

时间:2024-03-24 13:47:56 来源:网络cs 作者:峨乐 栏目:跨境学堂 阅读:

标签: 模板  标准 
阅读本书更多章节>>>>

目录

​编辑

什么是STL

STL的版本

 STL的六大组件

如何学习STL

STL的优势

 

STL的缺陷

 



 

⭐什么是STL

STL(standard template libaray- 标准模板库 ) : 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要阅读部分源代码, 主要参考的就是这个版本。

 ⭐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的优势

高效性

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

复用性

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

泛型编程

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

大量的算法

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

 

⭐STL的缺陷

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

____________________

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

 

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/xuetang/2024-03-24/147906.html,文章来源:网络cs,作者:峨乐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论