一.STL含义
1.STL指的是标准模板库,是一些算法和组件的集合,目的是不用重新开发,可以用现成的组件。
2.其本质是一些容器的集合,包括set、map、list、stack、map、vector、queue、iterator。
3.STL 是一种泛型编程,即关注算法本身,区别于面向对象关注于数据方面,它们的共同点是抽象和构造可重用代码。
4.模板使得算法独立于数据类型;而迭代器使得算法独立于容器类型,迭代器用作算法和容器之间的桥梁,几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
5.STL提供了大约100个实现算法的模版函数。
6.STL由6部分组成:容器、迭代器、算法、适配器、函数对象、内存分配器组成;其中容器用来存放数据,每个容器表现为类模板;迭代器用来将容器和算法联系起来,是一种智能指针,,通过运算符重载一般化了指针的概念;算法包括对数据集合的查找、排序、复制等操作,都以函数模板的形式出现;适配器用来修饰接口,分为容器配接器、迭代器配接器、函数对象配接器;内存分配器用来为各种容器分配和管理内存空间。
7.namespace即命名空间:本质就是在类的作用域之外定义更大的作用范畴,即延申作用范围,可以避免命名冲突的问题;实质就是为类定义容器,即将一些类和函数封装在容器中,可以用::调用,也可以用using namespace~;或者using ::;
8.标准头文件:cstdlib、cmath、cstring、iomanip、limits等
9.顺序容器类的头文件、、;关联类容器:、
二.迭代器
1.迭代器分为:输入–能读不一定能写、输出–能写不一定能读、前向迭代器–既能读又能写、双向迭代器、随机访问迭代器。
2.3个辅助函数模板:advance(iter,5)//指针向后移动5个元素;advance(iter,-3)//指针向前移动3个单位。
3.vector<int ::const_iterator itv;//只读迭代器即相对于普通迭代器,只能访问,不能修改。
三.算法
1.STL算法可分为四类:不改变容器序列和个数的算法、改变容器元素序列、排序、通用数值算法
2.第一类:find();count()、equal()
3.第二类:copy()、reverse()、fill()
4.第三类:sort()
5.accumulate()
6.#include<algorithm>
7.copy(v1.begin(),v1.end(),output)//将v1里的内容拷贝到output即输出流迭代器中。
8.排序算法使用:sort(v1.begin(),v1.end(),greater<int>());