标准容器(二)容器适配器

目录

适配器:

stack

queue

priority_queue

为什么queue和stack底层使用deque而不是vector?

存储大量数据的时候选择vector 还是deque?

priotiy_queue底层为什么使用vector?


适配器:

1.适配器底层没有自己的数据结构,他是另外一个容器的封装,它的方法全部由底层依赖的容器进行实现;

2.没有实现自己的迭代器。

stack

        默认底层使用duque,先进后出只能通过栈顶来进行元素的获取或者删除,没有其他的办法对内部元素进行操作,当然也没有自己的迭代器。

常用操作:

empty(); //判断堆栈是否为空

size(); //返回栈的大小

push(elem); //向栈顶添加元素

pop(); //从栈顶弹出元素

top(); //查看栈顶元素

queue

默认底层使用deque

常用操作:

empty(); //判断队列是否为空

size(); //返回队列的大小

push(elem); //向队尾添加元素

pop(); //从队头弹出元素

front(); //查看队头元素

back(); //查看队尾元素

priority_queue

默认底层vector

 常用操作:

empty(); //判断队列是否为空

size(); //返回队列的大小

push(elem); //向队尾添加元素

pop(); //从队头弹出元素

top(); //查看队头元素

为什么queue和stack底层使用deque而不是vector?

1. vector初始内存使用效率太低,动态扩容代价高,vector内存不够了需要每次动态扩容原来空间的两倍,而deque的二维空间上默认开辟这么大4096/sizeof(类型)不需要多次内存扩容;(vector也可以使用reserve函数实现设置大小,但是需要提前知道所需内存大小)

2. 对于queue来说,它需要从头部删除,如果依赖vector它的出队效率很低

3. 存储大量数据的时候,deque对内存的利用率比vector更好一些,deque 使用多个固定大小的缓冲区(块)来存储元素,当需要插入或删除元素时,只需分配一个新的缓冲区,并在需要时释放旧的缓冲区。

存储大量数据的时候选择vector 还是deque?

1.如果需要随机访问,使用vector;

2.频繁头部或尾部插入删除操作,使用deque;

3. 内存分配,deque 在内存分配方面比 vector 更灵活,它使用多个固定大小的缓冲区(块)存储元素,,可以根据需要分配新的缓冲区,并在需要时释放旧的缓冲区。这可以减少频繁的内存重新分配操作,对于存储大量数据时,可以提供更好的性能。

4. 迭代器的稳定性,在 vector 中,当插入或删除元素时,所有指向元素的迭代器可能会失效,需要重新获取;deque 中,只有涉及到插入或删除操作的迭代器会失效,其他迭代器仍然有效。

priotiy_queue底层为什么使用vector?

        底层默认吧数据组成一个大根堆结构,必须在一个内存连续的数组上构建一个大根堆或者小根堆,堆数据结构通常通过父子结点的下标来判断的,可以在 vector 中快速定位每个节点的父节点和子节点,以维护堆的性质并实现高效的插入和删除操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值