一直以来自认为作为程序员不需要去刻意写作记录东西,因为只要会编程写代码即使记不住的东西时间常了之后自然就能耳熟能详。直到最近找工作需要补的东西太多,回忆起之前学的东西时感觉很吃力恨当时没有吃透理解的同时也恨当时没有记笔记和总结,最后思考反省还是自己太懒,懒得去记录一些自以为以后不会忘记的东西,其实不然。希望以后能够坚持写一些东西,第一累积已有的知识,第二可以分享自己的想法。
由于是刚开始自学C++,自己的理解也可能会有偏差,网上有很多关于STL(Standard Template Library)的详解,由于之前没有具体学过C++,直到看了STL后,才知道大学里面学习的数据结构类似于STL里面的容器例如线性表对应的vector和线性链表List等,而类似的算法,如各种排序和查找就是STL中的algorithm,而迭代器类似于指针来用来对容器内容的遍历或走访。
一、STL简介
STL从广义上讲分为三类:算法(algorithm)、容器(container)和迭代器(iterator),容器和算法通过迭代器进行连接。STL详细的说六大组件:容器、算法、迭代器、仿函数、适配器和空间配制器。
1)容器
容器包括序列式容器、适配器容器、关联式容器
容器部分主要由头文件<vector>、<list>、<deque> 、<queue>、<stack>、<set>和<map>组成。
其中vector 为线性连续空间,可动态分别内存空间。
List为数据结构中的线性链表,内存空间不连续通过指针作为迭代器寻找上下节点,每次插入或删除一个元素,就分配或释放一个元素空间。因此List对于空间的运用绝对的精准,一点也不浪费。
queue 为队列,先进先出
stack 为栈 后进后出
关联式容器(Associated containers):元素位置取决于特定的排序准则,和插入顺序无关 ——set、multiset、map、multimap。