stl是c++的标准模板库,其应用是快速的构建程序以及高效的重用代码,并且移植性非常好。
    stl包含三部分内容:容器,迭代器,算法。
    迭代器是stl的核心,它连接了容器与算法,使得整个stl的体系得以强壮。
    首先讲述容器,容器包含了
    顺序容器:<vector>,<deque>,<list>
    关联容器:<map>,<set>,<multimap>,<multiset>
    容器适配器:<queue>,<stack>,<priority_queue>
    所有容器的基本操作都是基于插入值,删除值,遍历值而展开的,其实这三个基本操作也是整个数据结构,算法当中最基本的三个操作。
    在容器的插入值的算法中主要是提供了c<type> insert(value),在基本的插入算法下顺序容器还拥有push_back(value),push_front(value)插入算法。
    删除值算法主要是提供了c<type> erase(value),在基本的删除值算法下,顺序容器还拥有pop_back(value),pop_front()算法。
    遍历值主要是通过迭代器进行(迭代器实际上就是指向数据的指针)。
    在容器适配器中,所有的操作主要是依靠调用容器的操作进行,看似堆栈,队列的操作实际上是调用了容器的基本算法。
   在容器操作中需要注意的是(1)每当删除了值以后,那么迭代器会失效,这样程序是无法进行的。(2)容器都有自己的数据类型,不能用常用的int,long之类的来定义。(3)在运用容器中,注意容器的选用,vector,deque的数据结构基于线性表,而list的数据结构基于链表,所以当操作需要更多的随机访问时做好选用vector,deque,而当需要更多的是插入与删除那么最好选用list容器。

   接下来介绍迭代器
   迭代器对于操作集,可分为(1)插入迭代器,(2)流迭代器,(3)反向迭代器,(4)const迭代器。
   算法之所以不直接删除和添加元素,主要是提供插入迭代器完成的。而流迭代器主要是提供输入输出的方便。之所以有反向迭代器,主要是因为在算法中都是用迭代器自加完成的,而有些功能比如说要逆序访问时,那么反向迭代器的自加正好可以用。当容器是是const类型时,注意写入算法是不能调用的,而不管本身容器到底提供了哪些容器。还要注意的是算法对一对迭代器的类型必须要相同,不能一个是const而另一个却不是const。
   迭代器对于算法可以分为,输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器。
   以下是各种迭代器所支持的操作:
   输入迭代器:读,不能写  == != ++ * -> 支持的算法:find...istream_iterator是输入迭代器。
   输出迭代器:写,不能读 ++ * 支持的算法:copy...ostream_iterator是输出迭代器。
   前向迭代器:读和写 同时拥有输入迭代器和输出迭代器的算法 支持的算法:replace...
   双向迭代器: 读和写 拥有前向迭代器的算法和-- 支持的算法:reverse...
   随机访问迭代器:读和写 完整的迭代器算术运算 支持的算法:sort...
   
   最重要的是要知道算法到底对什么样的迭代器才是有效的。
   算法主要是包括3类,读算法,写算法,排序算法。