【笔记】C++的标准模版库
前言
C++的标准模版库(STL)学习笔记
STL基本概念
- STL从广义上分为:容器、算法、迭代器
- 容器和算法之间通过迭代器进行无缝连接
- STL几乎所有的代码都此用了类模版或者函数模版
STL6大组件
- 容器:各种数据结构。如:vector、list、deque、set、map
- 序列式容器:强调值的排序。序列式容器中的每个元素均有固定的位置
- 关联式容器:二叉树结构。各元素之间没有严格的物理上的顺序关系
- 算法:各种常用的算法。如:sort、find、copy、for_each
- 质变算法:是指运算过程中会更改区间内的元素内容。例如:拷贝、替换、删除
- 非质变算法:是指运算过程中不会更改区间内的元素内容。例如:查找、计数、遍历、寻找极值
- 迭代器:扮演了容器与算法之间的胶合剂
- 输入迭代器:对数据的只读访问,支持
++
、==
、!=
- 输出迭代器:对数据的只写访问,支持
++
- 前向迭代器:对数据的读写操作,并能向前推进迭代器,支持
++
、==
、!=
- 双向迭代器:对数据的读写操作,并能向前和向后操作,支持
++
、--
- 随机访问迭代器:对数据的读写操作,可以以跳跃的方式访问任意数据,支持
++
、--
、[n]
、-n
、<
、<=
、>
、>=
- 输入迭代器:对数据的只读访问,支持
- 仿函数:行为类似函数,可作为算法的某种策略
- 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西
- 空间配置器:负责空间的配置与管理
vector
- 容器:vector
- 算法:for_each
- 迭代器:vector
::iterator
包含头文件
1 |
容器存放内置数据类型
1 | // 定义容器 |
遍历容器
while遍历
1 | // 起始迭代器,指向容器中第一个元素 |
for遍历
1 | for (vector<int>::iterator it = v.begin(); it != v.end(); it++) |
for_each遍历
- 在for_each中传递回掉函数,实现遍历容器
1 |
|
容器存放自定义数据类型
1 | class Persion |
容器存放指针数据类型
1 | class Persion |
容器嵌套
1 | vector<vector<int>> father; |
遍历所有数据
1 | for (vector<vector<int>>::iterator fatherIt = father.begin(); it != father.end(); it++) |