概念
双端队列是一个类模板,其由若干个块构成,每个块中元素的地址是连续的,块之间的地址是不连续的。用户可以从前端或后端快速地插入与删除元素,并可以快速地随机访问元素,但在中间位置插入和删除元素速度较慢。deque不像vector一样将所有元素存放在一个连续的内存块,而是采用多个连续的存储块存放数据,由于重新分配空间后原有的元素不需要复制,所以空间的重新分配要快于vector。
声明
#include <iostream>
#include <deque>
using namespace std;
int main(void){
deque<int> dq1;
deque<int> dq2a = deque<int>(10);
deque<int> de2b(10);
deque<int> dq3a = deque<int>(5,1);
deque<int> dq3b(5,1);
int arr[] = { 1,2,3,4,5 };
deque<int> dq4 = deque<int>(arr, arr + 5);
deque<int> dq5 = deque<int>(dq3b);
return 0;
}
使用
常用方法
empty() : 队列判空size() : 返回队列元素个数front() : 取队头元素back() : 取队尾元素push_front(value) : 在队头插入元素valuepush_back(value) : 在队尾插入元素valuepop_front() : 删除队头元素pop_back() : 删除队尾元素clear() : 清空队列begin() : 返回指向第一个元素的正向迭代器end() : 返回指向最后一个元素的后一个位置的正向迭代器rbegin() : 返回指向最后一个元素的逆向迭代器rend() : 返回指向第一个元素前一个元素的逆向迭代器
Example
#include <iostream>
#include <deque>
using namespace std;
int main(void) {
deque<int> dq = deque<int>();
dq.push_back(5);
dq.push_back(10);
dq.push_front(1);
dq.push_front(0);
cout << dq.empty() << endl;
dq.pop_front();
dq.pop_back();
cout << dq.size() << endl;
int a = dq[0];
for (auto each : dq)
cout << each << ends;
cout << endl;
deque<int>::iterator itr;
for (itr = dq.begin(); itr != dq.end(); itr++)
cout << *itr << ends;
cout << endl;
deque<int>::reverse_iterator ritr;
for (ritr = dq.rbegin(); ritr != dq.rend(); ritr++)
cout << *ritr << ends;
cout << endl;
cout << dq[0] << endl;
dq.clear();
return 0;
}
|