c++4.deque容器
大约 3 分钟
deque
std::deque
定义:
实例化
#include <deque>
std::deque<int> myDeque; // 创建一个存储 int 类型的双端队列
标准库中的定义
template < class T, class Alloc = allocator<T> > class deque;
#include <iostream>
#include <deque>
int main() {
std::deque<int> myDeque = {1, 2, 3, 4, 5};
// 使用迭代器遍历
for (std::deque<int>::iterator it = myDeque.begin(); it != myDeque.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
deque VS ector
动态内存管理:
std::vector
:std::vector
是一个动态数组,元素存储在连续的内存块中,只能在数组的末尾进行快速的插入和删除。当容量不足时,可能需要重新分配内存。std::deque
:std::deque
也是动态数组,但它允许在两端进行快速的插入和删除操作。std::deque
使用块状分配内存,每个块中包含多个元素,这有助于减少重新分配内存的次数。
内存结构:
std::vector
:元素在内存中是连续存储的,因此访问元素的速度较快。std::deque
:元素可能存储在多个块中,因此内存不一定是连续的。但由于块的数量相对较小,访问元素的速度仍然可以维持在一个合理的范围内。
效率:
std::vector
:在末尾进行操作的效率非常高,但在头部进行插入和删除时可能比较慢,因为需要移动大量元素。std::deque
:在两端进行操作的效率都比较高,因为它使用了块状分配,减少了元素的移动。
迭代器的失效问题:
std::vector
:由于元素的连续存储,插入或删除元素可能导致迭代器失效。std::deque
:在两端进行插入或删除不会导致迭代器失效,因为块之间的元素位置关系不会改变。
中控区
- 指向前端块的指针(Front Block Pointer): 指向双端队列的前端块。
- 指向后端块的指针(Back Block Pointer): 指向双端队列的后端块。
- 块的数量信息: 记录了整个
std::deque
中有多少块。