几种容器的比较
1)vector
内部数据结构:数组。
在末尾增加或者删除元素所需时间与元素数目无关,在中间或者开头增加或者删除元素所需时间是随元素数目呈线性变化。
常用函数,push_back,insert,pop_back。
2):deque
内部数据结构是:数组
随机访问每个元素,所需要的时间为常量。在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除所需时间随元素数目呈线性变化。
(1)void push_back(const T&) //在容器的尾端插入新元素value
(2)void push_front(const T&) //在容器的首端插入新元素value
(3)void pop_front() // 删除deque的第一个元素
(4)void pop_back() // 删除deque的最后一个元素
3)list
内部数据结构:双向环状链表
不能随机访问一个元素,可双向遍历,在开头,末尾和中间的任何地方增加或者删除元素所需时间都是常量。
list.push_back(num) 在末尾增加一个元素。
list.pop_back() 删除末尾的元素。
list.push_front(num) 在开始位置增加一个元素。
list.pop_front() 删除第一个元素。
list.insert(pos,num) 在pos位置插入元素num。
list.insert(pos,n,num) 在pos位置插入n个元素num。
list.insert(pos,beg,end) 在pos位置插入区间为[beg,end)的元素。
4)set
set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。
1、键和值相等。
2、键唯一。
3、 平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。
5)map
1、键唯一。
2、map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
3、set和map的插入和删除操作都是log2型的,因此速率极快。