算法竞赛STL:deque用法
文章目录
容器描述:
deque
(双端队列)是一种具有动态大小的序列容器,可以在两端进行元素的插入和删除操作。
使用方法:
首先,你需要包含头文件#include <deque>
,然后声明一个deque
对象,如std::deque<int> d;
。这将创建一个可以存储整数的deque
。
底层实现:
deque
的底层实现是一个中央控制块和多个缓冲区。每个缓冲区都包含固定数量的元素。当在deque的一端插入或删除元素时,只需要分配或释放一个缓冲区,而不需要移动其他元素。
支持操作:
操作名 | 效果 | 传入参数 | 操作返回值 |
---|---|---|---|
push_back(const T& value) | 在deque的末尾添加一个元素 | value: 要添加的元素 | 无 |
push_front(const T& value) | 在deque的开头添加一个元素 | value: 要添加的元素 | 无 |
pop_back() | 删除deque的最后一个元素 | 无 | 无 |
pop_front() | 删除deque的第一个元素 | 无 | 无 |
size() | 返回deque中的元素数量 | 无 | 返回元素数量 |
empty() | 检查deque是否为空 | 无 | 如果deque为空,返回true;否则,返回false |
operator[] | 访问指定位置的元素 | pos: 元素的位置 | 返回指定位置的元素的引用 |
at(size_t pos) | 访问指定位置的元素,如果位置超出范围,抛出std::out_of_range 异常 | pos: 元素的位置 | 返回指定位置的元素的引用 |
front() | 返回第一个元素 | 无 | 返回第一个元素的引用 |
back() | 返回最后一个元素 | 无 | 返回最后一个元素的引用 |
常用示例:
#include <deque>
#include <iostream>
int main() {
std::deque<int> d;
d.push_back(1);
d.push_front(2);
for (int i = 0; i < d.size(); ++i) {
std::cout << "d[" << i << "] = " << d[i] << std::endl;
}
return 0;
}
经常产生的问题:
deque
的插入和删除操作比vector
快,但是访问元素的速度比vector
慢。deque
不保证元素在内存中的连续性,因此不能直接使用C++的指针和数组语法访问元素。