1. STL
1.1 STL基本概念
(1)STL(Standard Template Library):标准模板库
(2)STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)
(3)容器和算法之间通过迭代器进行无缝连接
(4)STL几乎所有的代码都采用了模板类或者模板函数
1.2、STL六大组件
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。
(1)容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
(2)算法:各种常用的算法,如sort、find、copy、for_each等。
(3)迭代器:扮演了容器与算法之间的胶合剂。
(4)仿函数:行为类似函数,可作为算法的某种策略。
(5)适配器:一种用来修饰容器或者仿函数或者迭代器接口的东西。
(6)空间配置器:负责空间的配置与管理。
1.3 STL中容器、算法、迭代器
(1)容器:置物之所也。STL容器就是将运用最广泛的一些数据结构实现出来。
- 常用的数据结构:数组、链表、树、栈、队列、集合、映射表等。
- 这些容器分为序列式容器和关联式容器两种:
- 序列式容器:强调值得排序,序列式容器中的每个元素均有固定位置。
- 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。
(2)算法:问题之解法也。
- 有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)。
- 算法分为:质变算法和非质变算法。
- 质变算法:是指运算过程中会更改区间内的元素的内容,例如拷贝、替换、删除等。
- 非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等。
(3)迭代器:容器和算法之间的粘合剂。
- 提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
- 每个容器都有自己专属的迭代器。
- 迭代器使用非常类似指针,初学阶段可以先理解迭代器为指针。
- 常用的容器中迭代器种类为双向迭代器和随机访问迭代器。
2、STL中最常用的容器为vector,可以理解为数组。
vector存放内置数据类型:
- 容器:vector
- 算法:for_each
- 迭代器:vector<int>::iterator
3、string容器:
(1)基本概念(本质):string是C++风格的字符串,而string本质上是一个类。
(2)string和char*区别:
- char* 是一个指针;
- string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。
(3)特点:
- string类内部封装了很多成员方法,
- 例如:查找find、拷贝copy、删除delete、替换replace、插入insert等。
- string管理char*所分配的内存,不用担心复制越界和取值越界等,由内部进行负责。