“STL”和“C++标准库”的区别是什么?
标准模板库 (STL) 是C++编程语言的一个软件库,它影响了C++标准库的许多部分。它提供了四个组件,称为算法、容器、函数和迭代器。需要注意的是,“STL”或“标准模板库”这个术语在ISO 14882 C++标准中任何地方都没有出现。因此,将C++标准库称为STL是错误的,即STL和C++标准库是两件不同的事物,前者是后者的子集。
STL 包含:
容器
STL包含顺序容器和关联容器。容器是存储数据的对象。标准顺序容器包括vector、deque和list。标准关联容器包括set、multiset、map、multimap、hash_set、hash_map、hash_multiset和hash_multimap。还有容器适配器queue、priority_queue和stack,它们是具有特定接口的容器,使用其他容器作为实现。
迭代器
迭代器是一个对象,它使程序员能够遍历容器。STL实现了五种不同类型的迭代器:输入(用于读取一系列值)、输出(用于写入一系列值)、前向(可以读取、写入和向前移动)、双向(像前向迭代器,但也可以向后移动)和随机访问(在一个操作中自由移动任意步数)。迭代器是STL通用性的主要特征。
算法
STL中的算法是专门设计用于元素范围的函数集合。范围是可以通过迭代器或指针访问的任何对象序列,例如数组或某些STL容器的实例。STL中算法的示例:sort(对范围内的元素排序)、binary_search(测试排序序列中是否存在值)、min_element(返回范围内的最小元素)等。请注意,所有这些算法都可以应用于作为模板接受的任何数据类型。
在C++编程语言中,C++标准库是类和函数的集合,它们是用核心语言编写的,并且是C++ ISO标准本身的一部分。C++标准库提供了一些通用容器、用于利用和操作这些容器的函数、函数对象、通用字符串和流(包括交互式和文件I/O)、对某些语言特性的支持以及用于日常任务(如查找数字的平方根)的函数。以下是C++标准库的一些特性:
流
这些库用于处理C++中可用的不同类型的流。例如,一个流通常表示文件流,这个类可以用来创建文件、向文件写入信息和从文件读取信息,一个流表示字符串流,通常用于操作字符串等。
容器
这是一个用于以各种数据类型(如向量、集合、映射、堆栈、队列等)存储数据的类的集合。它们是STL的一个组件。
通用库
像算法、Chrono(用于时间)、迭代器、内存等等之类的库。
数值库
这个库是C++程序可用于执行半数值运算的组件集合。例如, <complex> 定义了一个类模板,以及许多用于表示和操作复数的函数,<random> 用于生成(伪)随机数等。
线程
这是在C++11中引入的库,它主要处理并发性。
C标准库
C标准库中的每个头文件都以不同的名称包含在C++标准库中,通过删除“.h”并在开头添加“c”来生成;例如,“time.h”变为“ctime”。