C++ std::deque容器的用法(附带实例)
deque 容器和 vecotr 容器有很多相似之处。例如,它们都擅长在序列尾部添加或删除元素,都不擅长在序列中间添加或删除元素,都可以根据需要改变容量和大小。
和 vector 的不同之处在于,deque 容器在序列头部添加或删除元素也非常高效,vecotr 容器则不行。因此,当需要向序列两端频繁的添加或删除元素时,应选择 deque 容器。
使用 deque 容器需要创建 deque 对象,创建方法有以下几种:
1) 创建一个空 deque 对象,该对象可容纳 type 类型的数据,语法格式如下:
例如,为整型值创建一个空对象 intdeque,代码如下:
2) 创建一个大小为 size 的 deque 对象,语法格式如下:
3) 创建一个大小为 size 的 deque 对象,并将元素的值都初始化为 value,语法格式如下:
4) 使用复制构造函数,用已有的双端队列 mydeque 创建一个 deque 对象,语法格式如下:
5) 创建元素在指定范围内的双端队列,first 代表起始位置,last 代表结束位置,语法格式如下:
deque 容器的主要成员函数如下表所示:
【实例 1】 deque 容器的使用。本实例定义了一个类型为 int 的空 deque 对象,先插入数值,再删除部分数值。代码如下:
和 vector 的不同之处在于,deque 容器在序列头部添加或删除元素也非常高效,vecotr 容器则不行。因此,当需要向序列两端频繁的添加或删除元素时,应选择 deque 容器。
使用 deque 容器需要创建 deque 对象,创建方法有以下几种:
1) 创建一个空 deque 对象,该对象可容纳 type 类型的数据,语法格式如下:
std::deque<type> name;
例如,为整型值创建一个空对象 intdeque,代码如下:
std:: deque<int> intdeque;
2) 创建一个大小为 size 的 deque 对象,语法格式如下:
std::deque<type> name(size);
3) 创建一个大小为 size 的 deque 对象,并将元素的值都初始化为 value,语法格式如下:
std::deque<type> name(size,value);
4) 使用复制构造函数,用已有的双端队列 mydeque 创建一个 deque 对象,语法格式如下:
std::deque<type> name(mydeque);
5) 创建元素在指定范围内的双端队列,first 代表起始位置,last 代表结束位置,语法格式如下:
std::deque<type> name(first,last);
deque 容器的主要成员函数如下表所示:
函数 | 说明 |
---|---|
begin() | 返回指向序列第一个元素的迭代器 |
end() | 返回指向序列最后一个元素的迭代器 |
rbegin() | 返回一个反向迭代器,指向序列最后一个元素 |
rend() | 返回一个反向迭代器,指向序列第一个元素 |
empty() | 判断序列是否为空,如果为空,返回 true |
clear() | 删除序列中所有元素 |
at(n) | 返回序列位置 n 处的元素 |
erase(start,end) | 删除迭代器 start 和 end 所辖范围内的元素 |
erase(i) | 删除迭代器 i 指向的元素 |
insert(i,x) | 把 x 插入迭代器 i 指向的位置 |
insert(start,end) | 把迭代器 start 和 end 所辖范围内的元素插入迭代器 i 指向的位置 |
insert(n,x) | 把 x 的 n 个副本插入迭代器 i 指向的位置 |
assign(first,last) | 用迭代器 first 和 last 所辖范围内的元素替换 |
assign(num,val) | 用 val 的 num 个副本替换 |
front() | 返回对序列第一个元素的引用 |
back() | 返回对序列最后一个元素的引用 |
pop_back() | 移除序列最后一个元素 |
pop_front() | 移除序列第一个元素 |
push_back(x) | 在序列末尾处添加一个元素 x |
push_front(x) | 在序列起始位置添加一个元素 x |
size() | 返回序列大小(即元素的个数) |
resize(n,x) | 重新设置序列大小为 n,新元素的值均初始化为 x |
max_size() | 返回 STL 允许的最大容量,通常是一个很大的数 |
swap deque) | 交换两个序列的内容 |
【实例 1】 deque 容器的使用。本实例定义了一个类型为 int 的空 deque 对象,先插入数值,再删除部分数值。代码如下:
#include <iostream> #include <deque> using namespace std; int main() { deque<int> indeque; // 创建一个空的双端队列 indeque indeque.push_back(2); // 依次添加 5 个数据 indeque.push_back(3); indeque.push_back(4); indeque.push_back(7); indeque.push_back(9); cout << "Deque: old" << endl; for(int i=0; i< indeque.size(); i++) { cout << "indeque[" << i << "]: "; cout << indeque[i] << endl; } cout << endl; indeque.pop_front(); // 连续两次删除当前队列第 1 个元素 indeque.pop_front(); indeque[1]=33; // 为第 2 个元素赋值 333 cout << "Deque: new" << endl; for(int i=0; i<indeque.size(); i++) { cout << "indeque[" << i << "]: "; cout << indeque[i] << " "; } cout << endl; return 0; }程序运行结果为:
Deque: old
indeque[0]: 2
indeque[1]: 3
indeque[2]: 4
indeque[3]: 7
indeque[4]: 9
Deque: new
indeque[0]: 4 indeque[1]: 33 indeque[2]: 9