STL称为C++中的标准模板库
其中包含各种容器:顺序容器,关联容器
顺序容器:vector,list, deque, stack,queue,priority_queue;
关联容器:map,set;
1. 顺序容器:
(1). Vector:类似于数组,但是无需考虑内存分配,vector会随着元素的增加或减少而自动管理内存,程序员可通过reserve()成员函数进行干预来管理内存;
A. Reserve():程序员告诉vector需要预留多少个元素的存储空间;
B. Capacity():返回vector在需要分配更多的存储空间之前能够存储的元素个数—若不重新分配内存,当前可容纳的元素个数;
C. Size():当前实际拥有的元素个数;
(2). List:内部数据结构为双向环状链表,不能随机访问一个元素,但可双向遍历,且可动态地增加或减少元素,内存管理自动完成。
(3). deque:双向开口的连续线性空间。
A. dequeue对比vector:dequeue为双向开口的连续线性空间,vector为单向开口的连续线性空间。相对于Dequeue,vector在头部添加元素时操作效率极差!!!
B. dequeue对比list:list是一个双向环状链表,故不能随机地访问一个元素,但dequeue是双向开口的连续线性空间。
注:vector,list,deque是基本容器,而stack,queue,priority_queue是适配器。
(4). Stack是可将任意类型的序列容器转化为一个堆栈,但是一般使用deque作为支持的序列容器。约束:LIFO
(5). Queue也可以将任意类型的序列容器转化为一个堆栈,但是一般使用deque作为支持的序列容器。约束:FIFO
(6). Priority_queue可以将任意类型的容器转化为一个优先级队列,但是一般使用vector作为底层存储方式。约束:只能访问第一个元素,不能遍历整个priority_queue。第一个元素始终为优先级最高的一个元素。
2. 关联容器:map,set。
(1). map:所有元素都根据元素的键值被自动排序。Map的所有元素均是pair,第一个元素为键值,第二个元素为实值。
Multimap特性与map相同,但是multimap允许键值重复。
(2). set:所有元素都根据元素的键值自动排序。Set的元素不像map那样同时拥有键值(key)和实值(value),但是set元素的键值就是实值。Set元素不允许两个元素有相同的键值。
Multiset特性与set相同,但是multiset允许键值重复。