【C++】初识STL

简介: 【C++】初识STL

70ec5ef3811e42449157d8471ef3a12f_89036fb4d207457f9a47df5093ec95ff.gif

目录

🌞专栏导读

🌛什么是STL

🌛STL的版本

🌛STL的六大组件

🌛STL的重要性

🌛STL的缺陷


🌞专栏导读

🌟作者简介:日出等日落,在读本科生一枚,致力于 C/C++、Linux 学习。

🌟本文收录于 C++系列,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,持续更新!

🌟相关专栏推荐:C语言系列 、Linux系列 、数据结构与算法

🌛什么是STL

STL代表标准模板库(Standard Template Library),是C++标准库的一部分,提供了许多通用的数据结构和算法。STL的设计目标是提供高效、可重用和可靠的代码,以简化C++程序的开发和维护。


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


标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。


STL包含许多容器类,如向量(vector)、链表(list)、映射(map)和集合(set),这些容器类可用于存储和管理不同类型的数据。此外,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要阅读部分源代码,主要参考的就是这个版本。

🌛STL的六大组件

🔥标准模板库是一个C++软件库,大量影响了C++标准程序库但并非是其的一部分。其中包含4个组件,分别为算法、容器、函数、迭代器。


🔥模板是C++程序设计语言中的一个重要特征,而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。

6ed9eaf7cea2885768f065de747144a7_aff6d8f958fb4e70a68f8415be735c42.png

STL(Standard Template Library)是C++标准库中的一部分,由以下六个组件组成:


1.容器(Containers):包括向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)和映射(map)等数据结构,用于存储和组织数据。

2.迭代器(Iterators):用于遍历容器中的元素,提供了一种统一的方法来访问容器中的数据。

3.算法(Algorithms):包括查找(find)、排序(sort)、计数(count)和变换(transform)等常用算法,用于对容器中的数据进行操作和处理。

4.函数对象(Function Objects):是一种重载了函数调用运算符的类,可以像函数一样被调用,常用于算法中进行比较和运算操作。

5.适配器(Adapters):包括迭代器适配器(iterator adapters)和函数适配器(function adapters)等,用于将迭代器或函数的接口转换为另一种接口。

6.分配器(Allocators):用于在容器中动态分配和释放内存,提供了一种可定制的内存管理机制,可以满足不同的内存需求。

🌛STL的重要性

学习STL(Standard Template Library)的重要性在于:


提高代码质量和效率:STL包含了许多高效和可靠的数据结构和算法,可以帮助开发人员编写更好的代码,提高程序的质量和效率。

降低开发成本:由于STL已经实现了许多通用的数据结构和算法,开发人员不需要从头开始编写代码,可以大大降低开发成本和时间。

提高代码可重用性:STL提供了一种通用的编程模式,使得代码更容易被重用和维护。

提供了标准化的接口和实现:STL已经成为C++标准库的一部分,提供了一套标准化的接口和实现,使得开发人员可以跨平台和跨编译器使用STL。

促进程序员的学习和发展:学习STL需要掌握一些基本的编程概念和技术,这有助于促进程序员的学习和发展。

总之,学习STL对于C++程序员来说是非常重要的,它不仅可以提高代码的质量和效率,而且可以降低开发成本和提高代码的可重用性,同时也可以促进程序员的学习和发展。

🌛STL的缺陷

1.STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。

2.STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。

3.STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。

4.STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。


4bcf6431d70ecc6d1e38a34cb60bed15_8ba77c7d701a4b1b88726ff6de4066bf.gif

4bcf6431d70ecc6d1e38a34cb60bed15_8ba77c7d701a4b1b88726ff6de4066bf.gif


相关文章
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
108 10
|
13天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
35 4
|
15天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
37 5
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
25 2
|
20天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
40 0
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
55 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
74 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
67 1
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
65 6
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
67 7