STL常用的三种序列容器vector、list、deque
1、vector
内部以数组的形式实现,可高效的随机访问每个元素,高效的在末尾添加元素,容量动态增加,中间添加或者删除元素效率低,
vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入vector中时,内存会重新分配,所有的迭代器都将失效;否则,指向当前元素以后的任何元素的迭代器
将失效。当删除元素时,指向被删除元素以后的任何元素的迭代器都将失效。
2、list
内部以链表的形式实现,不能随机访问,在任何地方高效的插入、删除,
增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除元素的迭代器外,其它迭代器都不会失效
3、deque
内部以数组方式实现,可随机访问每个元素,高效的在开头和结尾添加、删除元素,在中间添加、删除元素效率低,
增加任何元素都将使deque的迭代器失效。在deque的中间删除元素将使迭代器失效。在deque的头或尾删除元素时,只有指向该元素的迭代器失效。
注:如果没有特别的理由让你使用list或者deque,那就使用vector
下面是三种容器添加1000000个整数所消耗的时间对比,可以知道
- vector在预先分配好空间使用随机访问方式效率明显高,而使用push_back添加元素预先分不分配容量基本无影响
- list使用push_back和push_front所消耗的时间差不多,预先分配空间比未预先分配空间耗时多,这是因为分配空间消耗了大量时间
- deque随机访问方式效率反而低,而不预先分配容量耗时更少
说明vector预先分配空间效率高,list和deque在预先分配大容量时候效率低