容器的不同数据结构
容器分为顺序/关联/…
C++ STL 组件之一: 容器
顺序容器
- vector 一维数组 push_back / pop_back
- deque 双端队列 push_back/pop_back push_front/pop_front
- list 双向循环链表容器 push_back/pop_back push_front/pop_front
容器适配器: 没有迭代器 没有自己的数据结构
自己啥方法也没 都调的别人的方法 没有自己的数据结构 是把别人的封装了一下 就是工具类
- stack 栈 push pop top size empty
- queue 队列 push pop front back size empty
- priority_queue 大根堆/小根堆 push pop top size empty
关联容器
set集合(key) map映射表(key-value)
无序的关联容器(哈希表 增删查时间复杂度O(1))
无序关联容器 =》 链式哈希表
unordered_set
unordered_map
有序的关联容器(红黑树 增删查时间复杂度O(logn))
有序关联容器 =》 红黑树
set
map
近容器
char array[100]; char *p
string str;
bitset 位容器
(数组也叫容器 string也叫容器 近容器)
bitset 位容器(占大小不是0就是1)
顺序容器:
容器交换函数 swap 效率怎么样?
直接对指针进行交换(地址的交换) 效率高 没有对内存的开辟构造释放
PS:array是内存不变数据变
1.vector: 向量容器
2倍扩容的一维数组
push_back O(1) insert(it, val) O(n)
pop_back O(1) erase(it) O(n)
尾删 o(1) 头删O(n)
迭代器遍历 O(n)
operator[] 随机访问 O(1)
效率相关的方法
reserve(10) resize(10)—两个都会开辟空间 但是reserve只开辟不放内存
empty size front back…
vector<int> vec;
vector<vector<int>> vec; 二维数组数据结构的容器开辟
vector<list<int>> vec;
list<vector<int>> vec;
2.deque : 双端队列容器
deque容器为一个给定类型的元素进行线性处理,像向量一样,
它能够快速地随机访问任一个元素,并且能够高效地插入和删
除容器的尾部元素。但它又与vector不同,deque支持高效插入
和删除容器的头部元素,因此也叫做双端队列。
动态开辟的二维数组
push_back O(1) push_front O(1) insert(it, val) O(n)
pop_back O(1) pop_front O(1) erase(it) O(n)
迭代器遍历 O(n)
扩容的时候默认扩容第一维 二倍扩容 把第二维的放在第一维扩容的
内存不连续 所以deque的使用效率比vector高一些 头插尾插两个一样快 但是从中间插入的时候vector更快
empty size front back…
3.list : 链表容器
带头节点的双向链表结构
push_back O(1) push_front O(1) insert(it, val) O(1)
pop_back O(1) pop_front O(1) erase(it) O(1)
迭代器遍历 O(n)
增加删除用list 随机访问用vector
效率相关的方法 splice函数
list::splice实现list拼接的功能。
将源list的内容部分或全部元素删除(直接拿来 然后直接指针指向)
拼插入到目的list。
函数有以下三种声明:
void splice ( iterator position, list<T,Allocator>& x ); //
void splice ( iterator position, list<T,Allocator>& x, iterator i );
vo