【C++】STL简介

一、什么是STL?

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

STL只是C++标准库的一部分,不能代表整个C++标准库。

二、STL的版本

1、原始版本

Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP版本--所有STL实现版本的始祖。

2、RW版本

由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一
般。

3、P.J.版本

由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

4、SGI版本

由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可
移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。

三、STL六大组件

1、算法(Algorithms)

STL算法是一系列定义在<algorithm>头文件中的函数模板,它们可以对容器中的元素执行各种各样的操作,比如排序、查找、拷贝等。这些算法设计为通用的,因此可以应用于任何满足其要求的序列上。

2、容器(Containers)

容器是用于存储对象的数据结构,如向量(std::vector)、列表(std::list)、集合(std::set)等。每个容器都有自己的接口,通过这个接口可以插入、删除和访问元素。

严格来说string是不属于STL的,因为它产生于STL之前,但STL一些容器的功能设计也有参考string的"影子",如果不较真产生时间的话也可以把string当作是STL中的一个容器。

3、迭代器(Iterators)

迭代器充当了容器和算法之间的桥梁,提供了类似指针的功能来访问容器内部的元素。不同的容器可能有不同的内存布局,但是迭代器提供了一个统一的方式去遍历这些元素。

4、仿函数(Functors)

在STL中,一个对象如果像函数那样可以被调用,则称其为仿函数。仿函数通常用于算法中作为比较操作或其他操作的标准,例如std::less可以作为一个参数传递给排序算法以定义排序规则。

5、适配器(Adaptors)

容器适配器,如堆栈(std::stack)、队列(std::queue)和优先队列(std::priority_queue),是在其他容器基础上构建的新容器。它们改变了原容器的行为,使其更适合特定的任务。

6、空间配置器(Allocators)

分配器处理内存管理的工作,如分配和释放内存块。它们可以被用来控制容器如何分配和释放内存,尽管默认情况下大多数程序会使用标准分配器std::allocator。

四、STL的重要性

1、通用性:STL提供了大量的泛型算法,这意味着它们可以应用于任何类型的对象上,只要这些对象满足某些条件(如可比较)。这种通用性使得程序员无需为每种数据类型重写相同的代码。

2、高效性:STL中的容器和算法都经过了优化,以提高性能。例如,std::vector 是一个实现高效的动态数组的容器,而 std::sort 提供了一种快速排序的方法。

3、一致性:STL提供了一套一致的接口,这使得不同部分的代码更容易协同工作。例如,所有容器都支持一组类似的迭代器方法,这让程序员可以在不同的容器之间切换而不需要改变太多代码。

4、可移植性:由于STL是C++标准的一部分,因此它在所有支持C++标准的平台上都有相同的行为,这极大地增强了代码的可移植性。

5、简化开发:通过使用STL,开发者可以减少编写基础代码的时间,从而将更多的精力集中在应用程序的核心功能上。STL的组件使得处理集合、迭代、查找等常见任务变得更加简单。

6、易于学习和使用:尽管STL的强大功能可能看起来有些复杂,但是一旦掌握了基本概念,比如容器、迭代器、算法和函数对象,开发者就能很快地开始利用它来编写高效的代码。

网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

五、结语

本篇到这里就结束了,简单的介绍了STL,希望可以帮助到大家,祝大家天天开心!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值