1、STL概念:标准模板库
STL从广义上分为:容器、算法、迭代器。其中容器与算法之间通过迭代器进行无缝连接。
STL 几乎所有的代码都采用了模板类或者模板函数
2、STL六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器
2.1、
(1)容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据
(2)算法:各种常用算法,如sort、find、copy、for_each等
(3)迭代器:扮演了容器与算法之间的胶合剂
(4)仿函数:行为类似函数,可作为算法的某种策略
2.2 STL中容器、算法、迭代器
容器:置物之所也
STL容器就是将运用最广泛的一些数据结构实现出来
常用的数据结构:数组、链表、树、栈、队列、集合、映射表等
这些容器分为序列式容器和关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。
关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。
算法:问题之解法也
有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)
算法分为:质变算法和非质变算法
质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等。
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等。
迭代器:容器和算法之间的粘合剂
提供一种方法,使之能够依序访问某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
每个容器都有自己专属的迭代器
迭代器的使用非常类似于指针,初学阶段,我们可以先理解迭代器为指针
3、string 容器
3.1 基本概念
本质:string 是c++风格的字符串,而string本质上是个类
string 和 char *的区别
(1)、char *是一个指针
(2)、string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。
特点:
string类内部封装了很多成员方法
例如:查找--find,拷贝--copy,删除--delete,替换--replace,插入--insert
string管理char * 所分配 的内存,不用担心复制越界和取值越界等,由类内部进行负责
3.2 string构造函数
构造函数原型:
(1)、string();//创建一个空字符串 例如:string str;
(2)、string(const char * s);//使用字符串s初始化
(3)、string(const string& str);//使用一个string 对象初始化另一个string 对象-----拷贝
(4)、string(int n,char c);//使用n个字符c初始化
4 vector容器
4.1基本概念
功能:vector数据结构和数组非常相似,也称为单端数组
vector与普通数组的区别:不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展:
(1)并不是在原有空间之后接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间