什么是STL?
STL就是Sandard Template Library,标准模板库,所有C++编译器和所有操作系统平台都支持的一种库,不需要了解底层是怎么样实现的,只要掌握了使用就可以。
STL的优点在于通用性,与C++的OOP特性无关。
模板是什么?
模板是C++中实现代码重用机制的一种工具,可以实现类型参数化,把类型定义为参数。函数模板和类模板允许用户构造模板函数和模板类。STL是标准模板库,学完了就容易理解了。例如定义函数模板vector<class T>,T可以是int,也可以是string是吧,这时候T就是待实例化的类型,ok,go on!
命名空间?
编译器识别不识别命名空间没关系,但是为了避免STL的算法和其他同名算法发生冲突,统一将STL封装到std中,所以使用STL的时候要引用命名空间
using namespace std;
STL头文件不需要.h来扩展。
STL的组成:
STL有很多组件,我们主要了解其中三个基本组件就可以了。
① 迭代器Iterator----提供访问对象的方法。
② 容器container----像是list、vector的这些可以容纳数据的模板类。
③ 算法Algorithm----处理数据的操作等。
我们来看看专家怎么说:
- 容器(container):容器是数据在内存中组织的方法,例如,数组、堆栈、队列、链表或二叉树(不过这些都不是STL标准容器)。STL中的容器是一种存储T(Template)类型值的有限集合的数据结构,容器的内部实现一般是类。这些值可以是对象本身,如果数据类型T代表的是Class的话。
- 算法(algorithm):算法是应用在容器上以各种方法处理其内容的行为或功能。例如,有对容器内容排序、复制、检索和合并的算法。在STL中,算法是由模板函数表现的。这些函数不是容器类的成员函数。相反,它们是独立的函数。令人吃惊的特点之一就是其算法如此通用。不仅可以将其用于STL容器,而且可以用于普通的C++数组或任何其他应用程序指定的容器。
- 迭代器(iterator):一旦选定一种容器类型和数据行为(算法),那么剩下唯一要他做的就是用迭代器使其相互作用。可以把达代器看作一个指向容器中元素的普通指针。可以如递增一个指针那样递增迭代器,使其依次指向容器中每一个后继的元素。迭代器是STL的一个关键部分,因为它将算法和容器连在一起。
Iterator迭代器
迭代器可以说类似于指针,但是又不是指针,因为不一定具有地址,可以当成指针一样操作。很多书或者博客都将迭代器专门拎出来将,我就不进行详细介绍了,稍微普及一下知识就行了。
迭代器有这么几类:输入Iterator
、输出
Iterator、前向Iterator、
双向
Iterator、流Iterator等。
copy( s.begin() , s.end() , ostream_iterator<int>(cout," ") );
意思是:将由s.begin()和s.end()(不包含s.end())所指定的序列复制到标准输出流cout中,用空格作为间隔。
下面的博客详细介绍一些容器的使用方法,仅用于做一些简单的算法题,想深入了解C++的实现机制可以找参考书来看。