STL (standard template Library ) STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。
STL 由以下五部分组成:
STL Containers
Iterators
Allocators
Algrithms
Object Functions
在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
我在这里记录一下我理解的list,vector和map的用法与区别。
vector 和数组类似 ,拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[ ] 操作符访问其中的元素 ),但由于内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝(复杂度是O(n)),另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。
list是由数据结构中的双向链表实现的,因此它的内存空间可以是不连续的。因此只能通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,需要遍历中间的元素,搜索复杂度O(n),因此它没有提供[ ]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。
具体的参见:http://genwoxuevc.blog.51cto.com/1852984/503337