C++学习14-容器的不同数据结构简介

本文介绍了C++ STL中的容器,包括顺序容器如vector、deque和list,以及容器适配器如stack、queue和priority_queue。顺序容器中,vector适合随机访问,deque支持快速头部插入,而list擅长插入和删除操作。关联容器包括set、map、unordered_set和unordered_map,提供键值对存储,其中无序关联容器采用哈希表实现高效查找。
摘要由CSDN通过智能技术生成

容器分为顺序/关联/…

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值