C++ STL(Standard Template Library)由以下几部分组成:
-
容器(Containers):包括 vector、list、deque、set、map 等数据结构,用于存储和管理数据。
-
迭代器(Iterators):用于遍历容器中的元素。
-
算法(Algorithms):包括排序、查找、合并等常用算法,用于对容器中的元素进行操作。
-
函数对象(Function Objects):类似于函数的对象,可重载运算符,用于算法中的比较和操作。
-
适配器(Adapters):包括迭代器适配器和容器适配器,用于在不同的容器和迭代器间进行适配和转换。
STL 的设计思想是将数据结构和算法分离,提供了一种高效、灵活和通用的程序设计方法,为 C++ 程序员提供了丰富的工具和语言支持。
容器(Containers)
C++ STL(Standard Template Library)中的容器(Containers)由以下几部分组成:
-
序列式容器(Sequence Containers):包括 vector、deque、list、array、forward_list,其中 vector 和 deque 支持快速的随机访问,list 和 forward_list 支持快速的插入和删除操作。
-
关联式容器(Associative Containers):包括 set、multiset、map 和 multimap,其中 set 和 map 中的元素按照一定的顺序排列,multiset 和 multimap 中可以有重复的元素。
-
容器适配器(Container Adapters):包括 stack、queue 和 priority_queue,是在序列式容器基础上提供的一种封装,使得容器具有栈、队列和优先队列的行为特征。
容器提供了一种方便、高效、安全的数据管理方式,可以满足不同的需求,提高程序的可靠性和可维护性。
vector
vector 是一个动态数组,可以在末尾快速添加和删除元素,支持随机访问。但是在中间插入或删除元素的效率较低。
deque
deque(双端队列)是一个双向队列,支持在两端快速添加和删除元素,但是随机访问的效率较低。
list
list 是一个双向链表,可以在任意位置快速添加和删除元素,但是随机访问的效率较低。
forward_list
forward_list 是一个单向链表,和 list 相比,它占用更少的内存,但是只支持单向遍历。
set
set 是一个有序集合,其中的元素按照键值排序,不允许重复元素。
multiset
multiset 和 set 类似,但是允许重复元素。
map
map 是一个有序映射,其中的元素按照键值排序,每个键值只能对应一个元素。
multimap
multimap 和 map 类似,但是每个键值可以对应多个元素。
unordered_set
unordered_set 是一个无序集合,其中的元素不按照键值排序,不允许重复元素。
unordered_multiset
unordered_multiset 和 unordered_set 类似,但是允许重复元素。
unordered_map
unordered_map 是一个无序映射,其中的元素不按照键值排序,每个键值只能对应一个元素。
unordered_multimap
unordered_multimap 和 unordered_map 类似,但是每个键值可以对应多个元素。
总之,不同的容器各有其优势和适用场景,需要根据具体的需求来选择使用。