
C ++ STL(标准模板库)是HP Labs开发的一系列软件的统称,是一组功能强大的C ++模板类. STL的目的是使组件标准化标准模板库,从而无需重新开发,以便后来者可以使用现成的组件,这与开源组件有些不同. STL的版本很多,常见的是HP STL,PJ STL,SGI STL等. 此外标准模板库,STL库是C ++标准库的一部分,并且包含这两个库.
由于我通常的编程环境主要是在Linux系统下,因此在下面的摘要中,我将主要关注GNU ISO C ++库中的STL源代码(版本5.2.1),并用SGI STL 2.91源代码对其进行补充. 代码为了进行分析和总结,附加SGI的主要原因是SGI STL版本更早并且代码的可读性相对更好.
关于源代码获取方法: GNU C ++库位于Linux系统的/ usr / include /目录中;对于sgi库,您应该在Internet上进行搜索. 我是从此链接下载的:

bash-4.2$ ls /usr/include/c++/4.8.5/
algorithm cerrno complex cstdint debug future list profile stdexcept typeindex
array cfenv complex.h cstdio decimal initializer_list locale queue streambuf typeinfo
atomic cfloat condition_variable cstdlib deque iomanip map random string type_traits
backward chrono csetjmp cstring exception ios memory ratio system_error unordered_map
bits cinttypes csignal ctgmath ext iosfwd mutex regex tgmath.h unordered_set
bitset ciso646 cstdalign ctime fenv.h iostream new scoped_allocator thread utility
cassert climits cstdarg cwchar forward_list istream numeric set tr1 valarray
ccomplex clocale cstdbool cwctype fstream iterator ostream sstream tr2 vector
cctype cmath cstddef cxxabi.h functional limits parallel stack tuple x86_64-redhat-linux
STL库和C ++标准库之间的关系:


STL库和C ++标准库的关系图(来自网络的图片)

STL的六个组成部分

STL主要包含六个主要组件,每个组件负责不同的功能,并且还涉及不同的知识点. 其中,容器和算法是最重要的,其他组件起着匹配的作用,使算法和容器可以更好,更方便地合并. 组件之间的一般关系如下(来自网络的图片):

六个组件的交互关系: 容器通过分配器获取数据存储空间,算法通过迭代器访问容器的内容,函子可以帮助算法(算法)完成不同的策略更改,适配器(适配器)可以修改或插入函子(functor).

如有效C ++的第一部分所述,C ++是一种多范式编程语言,它还支持过程形式,面向对象形式,功能形式,泛型形式和元编程形式. 在我们通常的开发过程中,我们更容易面对过程和面向对象的形式. 虽然STL是通用编程(GP)的杰作,但是对于GP,我们必须具备模板编程的基础,了解类模板,函数模板,成员函数模板,模板化,模板化等. 重载,因为STL容器中存储的元素是不确定的(通用),那么对于这些用户定义的类型,您还需要具有与基本类型相似的算术运算(与int相似)
总体,模板和运算符重载是学习STL的必要技术基础.
当我学到一些东西时,我总是问自己,为什么我应该学这个?那么STL可以带给我们什么?
1. 首先,对于C ++语言,C ++可以分为四个部分,C,面向对象的C ++,模板C ++,STL(有效C ++的摘要),然后为了拥有全面的C ++,我们要理解和掌握将要了解和研究STL并掌握通用思维. 当然,目前,在C ++ 11/17/20和boost中优化C ++的使用,相关的高级功能以及其他一些高级技术(多线程和多进程等)的实现和封装是也是现代的C ++. 这些组件还需要我们学习和掌握.
2. 图灵奖获奖者之父尼克劳斯·沃思曾经说过,编程=算法+数据结构,对于任何想学习或巩固数据结构和算法能力的人来说,STL都是宝库,容器的底部由各种实现经典数据结构和主流基本算法也包括在内.
因此,对STL进行分析和总结并加以实施,可以提高我们的语言精通程度和相关的编程思想,以及数据抽象能力!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-231368-1.html
照他的观点
上午10点半飞过广场后各自回场
欢迎美国军舰莅临检查南海岛礁建设情况