c++STL的一点点分享(一)

如果有什么不对的地方,请各位大佬及时提出。

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();切片方法,不涉及对象的拷贝和析构,非常高效。

猜你喜欢

转载自blog.csdn.net/lixin_com/article/details/80614491