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
ICP备案:
公安联网备案: