更多精彩请关注微信公众号“爱折腾的码农”,如果大家感兴趣的,可以多多分享关注微信公众号(你的关注是我写下去的动力),二维码见下图。
本篇内容总结STL大体框架,接下来几篇文章会详细介绍空间配置器、序列式容器(vector、list、deque)、关联式容器(map、unordered_map)的实现原理,如果大家对我写的内容感兴趣,欢迎关注微信公众号点赞,这也可以督促我尽快写完STL部分内容。
简介:STL的六大组件
容器、算法、迭代器、仿函数、配接器、空间配置器。
容器
各种数据结构,其实就是用来存放数据的,例如:vector、list、deque、map
、unordered_map,其分为两种:序列式容器和关联式容器。从底层实现上来说是一种类模板。
序列式容器(顺序容器) | |
vector | 可变大小数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢。 |
deque | 双端队列。支持快速随机访问。在头尾位置插入或删除速度很快 |
list | 双向链表。只支持双向顺序访问。在list中任何位置进行插入或删除操作速度都很快 |
forward_list | 单向链表。只支持单向顺序访问。在链表任何位置进行插入或删除操作速度都很快 |
array | 固定大小数组。支持快速随机访问,不能添加或删除元素 |
string | 与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入或删除速度快 |
关联式容器 | |
按关键字有序保存元素 | |
map | 关联数组:保存关键字-值对 |
set | 关键字即值,只保存关键字的容器 |
multimap | 关键字可重复的map |
multiset | 关键字可重复出现的set |
无序集合 | |
unordered_map | 用哈希函数组织的map |
unordered_set | 用哈希函数组织的set |
unordered_multimap | 哈希函数组织的map:关键字可重复出现 |
unordered_multiset | 哈希函数组织的set,关键字可重复出现 |
算法
通俗讲就是对容器中数据的处理方法,常见的算法有sort、search、copy等,实现上来说是一种函数模板。
迭代器
作为容器和算法之间的胶合剂,就是“泛型指针”,从实现上来说就是将operator*、operator->、operator++、operator--等指针操作的类模板。
仿函数
行为类似函数,可作为算法的某种策略,从实现上来说就是重载operator()的类或类模板。
配接器
用来修饰容器/仿函数/迭代器接口的。
空间配置器
负责空间分配和管理,从实现上来说就是实现了动态空间分配、空间管理、空间释放的类模板。
六大组件关系如下