如果有什么不对的地方,请各位大佬及时提出。
1、vector(向量容器)
底层实现:
vector底层是一个以2倍方式增长的动态开辟的一维数组,它的初始大小是零,所以当你第一次插入的时候,它的变化是从0-》1,然后是从2-4-8-16。。。由于它的开辟效率不高,所以库里提供了reserve()方法和resize()方法。
提供的方法:
push_back();
尾插,
pop_back();尾删
insert(it);迭代器
earse(it);
迭代器失效问题?
在用迭代器insert ears时没有给it重新赋值就会面临这个问题。
2、deque(双端队列)
底层实现:
deque底层是一个动态开辟的二维数组,在我的vs2012上它的一维默认开辟大小是8,二维是4个字节。它的增长方式是先增长二维,再增长一维。
_STD_BEGIN
// DEQUE PARAMETERS
#define _DEQUEMAPSIZ 8 /* minimum map size, at least 1 */
#define _DEQUESIZ (sizeof (value_type) <= 1 ? 16 \
: sizeof (value_type) <= 2 ? 8 \
: sizeof (value_type) <= 4 ? 4 \
: sizeof (value_type) <= 8 ? 2 \
提供的方法:
push_back(); 头 插
push_front();头插
pop_front();尾插
pop_back();尾删
insert();迭代器插入
earse();迭代器删除
swap();容器交换
3.list(双向链表)
底层实现:底层是一个带头结点的双向链表。
提供的方法:
push_back();尾插 O(1)·
push_front();头插 O(1)
pop_front();头删 O(1)
pop_back();尾删 O(1)
insert();任意插入 先找在插 O(n)
earse();先找再删除 O(n)
splice();切片方法,不涉及对象的拷贝和析构,非常高效。