目录
为什么queue和stack底层使用deque而不是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 中快速定位每个节点的父节点和子节点,以维护堆的性质并实现高效的插入和删除操作。
540

被折叠的 条评论
为什么被折叠?



