基本概念
- STL(Standard Template Library,标准模板库)
- STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)
- 容器和算法之间通过迭代器进行无缝衔接
- STL几乎所有的代码都采用模板类或者模板函数
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
- 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据
- 算法:各种常用算法,如sort、find、copy、for_each等
- 迭代器:扮演了容器和算法之间的胶合剂。
- 仿函数:行为类似函数,可作为算法的某种策略。
- 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
- 空间配置器:负责空间的配置与管理。
容器类型
序列式容器
string
- 本质:string是C++风格的字符串,而string本质上是一个类
- string和char*的区别:
- char*是一个指针
- string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器
- 特点:
- string类内部封装了很多成员方法,例如:查找find、拷贝copy、删除delete、替换replace、插入insert等
- string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
vector
- 功能:vector数据结构和数组非常相似,也称为单端数组
- vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展
- 动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
- 插入删除:
- 尾插---push_back
- 尾删---pop_back
- 插入---insert(提供位置迭代器)
- 删除---erase(提供位置迭代器)
- 清空---clear
deque
- 功能:
- 双端数组,可以对头端进行插入删除操作
- deque与vector区别:
- vector对于头部的插入删除效率太低,数据量越大,效率越低
- deque相对而言,对头部的插入删除速度会比vector快
- vector访问元素时的速度会比deque快,这和两者内部实现有关
- deque内部工作原理:
- deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
- 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
- deque容器的迭代器也是支持随机访问的
- 插入删除:
- 插入和删除提供的位置是 迭代器
- 尾插---push_back()
- 尾删---pop_back()
- 头插---push_front()
- 头删---pop_front()
-
insert(pos,elem);
在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos,n,elem);
在pos位置插入n个elem数据ÿ