STL(标准模板库)的小总结

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adaptors)、算法(algorithms)、仿函数(functors)六个部分。
1、容器:
(1)顺序容器
vector(向量容器)
1>默认没开辟空间,初始化效率太低(2倍增长的数组0->1 1->2 2->4 ….)reserve(100):解决初始化效率太低的问题,是容器预留空间,但并不真正创建元素对 象,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()和insert()函数。
resize(100):是改变容器的大小,并且创建对象,因此调用这个函数之后,就可以引用容器内的对象了,因此当新加入新元素时候,用operator[]操作符,或者用迭代器来引用元素对象。
2>操作方法:push_back
pop_back
insert(it ,val)
erase
swap() //效率不高,比如:两个容器的长短不一致,要交换的话,短的需要开辟新的内存,而且交换过程中还要构造临时对象:1、自己和自己交换,do nothing 2、判断两个容器的allocator是否一样(内存管理方式) 3、两个容器的allocator不一样,效率非常低
没有push_front 和pop_front的原因:操作头,时间复杂度太高O(n)
(2) deque(双端队列容器)(动态开辟的二位数组)
1>默认没开辟内存,2倍增长1维
2>操作方法:push_back O(1)
insert(it, val) O(n)
erase() O(n)
pop_back O(1)
swap() 效率
push_front O(1)
pop_front O(1)
(3)list(双向链表容器)
1>默认开辟了头节点
2>(链表的各种增删操作,都要先查询找到位置)
push_back O(1)
insert(it, val) O(1)
erase() O(1)
pop_back O(1)
swap() 效率
push_front O(1)
pop_front O(1)
splice(链表的切片)
(2)关联容器
1>有序的关联容器:
底层数据结构:红黑树 增删查时间复杂度:O(nlog2 n)
应用特点:数据排好序了,非常适合范围查找
#include 【key, V()】
set集合 只存key
multiset多重集合
map映射表
multimap多重映射表
2>无序的关联容器
底层数据结构:哈希表(链地址法,线性探索法(防止哈希冲突))
增删查的时间复杂度:接近O(1)【为什么是接近,因为哈希冲突/哈希碰撞是不可能避免的】
应用特点:快速的增删查,但是哈希表的数据是无序的,非常不适合范围查找

vector和deque
1.初始效率上的区别:
2.头尾操作(插入和删除 时间复杂度)
3.中间操作(内存是否连续带来的效率上的差别)

vector和list 数组(查询多 数组的随机访问[index])和链表(增删多)

(3)容器适配器
1> #include
stack (deque)
push pop top empty size
2>#include
queue 队列 (deque)
push pop front() back() empty size
3>priority_queue 优先级队列 (vector)
默认维护了一个大根堆结构 => vector 就是堆上每个节点的访问
效率,底层数据结构如果是内存连续的数组,堆上每个节点的访问效率是O(1)
push pop top empty size

猜你喜欢

转载自blog.csdn.net/wjh814/article/details/80607061