- C++
重置ing…
- 2024-8-27 20:24:31 @
1. STL
STL(Standard Template Library),即标准模板库,是一个具有工业强度的、高效的 C++ 程序库。它被容纳于 C++ 标准程序库(C++ Standard Library)中,是 ANSI/ISO C++ 标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大 C++ 程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。
STL 的一个重要特点是 数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得 STL 变得非常通用。例如,由于 STL 的sort()
函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表、容器和数组;
STL 另一个重要特性是 它不是面向对象的。为了具有足够通用性,STL 主要依赖于模板而不是封装、继承和虚函数(多态性)—— OOP(面向对象程序设计,Object Oriented Programming)的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得 STL 的组件具有广泛通用性的底层特征。另外,由于 STL 是基于模板,内联函数的使用使得生成的代码短小高效;
从逻辑层次看,在 STL 中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像需求(requirements)、概念(concept)、模型(model)、容器(container),算法(algorithm)、迭代器(iterator)等。与 OOP 中的多态(polymorphism)一样,泛型也是一种软件的复用技术;
从实现层次看,整个 STL 是以一种类型参数化的方式实现的,这种方式基于一个在早先 C++ 标准中没有出现的语言特性——模板(template)。
2. STL 内容介绍
STL中六大组件:
容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;
算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;
仿函数(Functor)
适配器(Adaptor)
分配器(allocator)