【C++】STL各容器的实现,时间复杂度,适用情况分析

一.vector

1.概述

动态数组,在内存中具有连续的储存空间,在堆上分配内存,支持快速随机访问,在中间插入和删除慢,但在末尾插入和删除快

2.特点

1)拥有一段连续的内存空间,并且起始地址不变,因此能非常好的支持随机存取,但由于其内存空间是连续的,所以在中间插入和删除会造成内存块的拷贝,另外,当该数组的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝,这些都大大的影响了vector的效率

2)对头部和中间的元素进行插入删除需要移动内存,如果元素是结构体或者类,那么移动时还会进行析构和构造操作,所以性能不高

3)对末尾的元素的操作最快,此时一般不需要移动内存,只有剩余内存不够时才需要

3.时间复杂度分析:

头部插入删除:O(N)

尾部插入删除:O(1)

中间插入删除:O(N)

查找:O(N)

4.优缺点及适用场景

优点:支持随机储存,查询效率高

缺点:在头部和中间插入删除元素效率低,需要移动内存

适用场景:适用于元素结构简单,变化小,并且频繁随机访问的场景

5.结论

vector常用来保存需要经常进行随机访问的内容,并且不需要对中间元素进行添加和删除操作

二.双向队列deque

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值