STL 的最主要的两个特点 :数据结构和算法的分离,非面向对象本质。访问对象是通过象指针一样的迭代器实现的;容器是象链表,矢量之类的数据结构,并按模板方式提供;算法是函数模板,用于操作容器中的数据。由于STL以模板为基础,所以能用于任何数据类型和结构。
我们常用到的STL容器 有vector、list、deque、map、multimap、set和multiset。其底层实现各不相同:
vector是动态数组。list是双向链表。deque为一段段连续定长数组拼接而成。map是一对一映射。multimap是一对多映射。set是没有重复元素的平衡二叉树。multiset中可以包含重复元素。
STL迭代器 可分为五种:
· Input iterators 提供对数据的只读访问。
· Output iterators 提供对数据的只写访问
· Forward iterators 提供读写操作,并能向前推进迭代器。
· Bidirectional iterators 提供读写操作,并能向前和向后操作。
· Random access iterators 提供读写操作,并能在数据中随机移动。
STL提供很多使用的函数模板,在使用这些函数模板 时能够回调 函数,这里需要注意的就是模版函数可以接收的binary_function的返回值类型,以及回调函数的参数列表两个问题。除了回调函数,还可以传入函数对象 ,这个对象重载operator方法即可。