首页 > 编程笔记 > C++笔记 阅读:22

C++ std::deque容器的用法(附带实例)

deque 容器和 vecotr 容器有很多相似之处。例如,它们都擅长在序列尾部添加或删除元素,都不擅长在序列中间添加或删除元素,都可以根据需要改变容量和大小。

和 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 容器的主要成员函数如下表所示:

表: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

程序中通过 push_back() 函数把 5 个值插入 deque 对象中并显示出来,然后连续两次删除 deque 对象的当前第一个元素,并为删除后的 deque 对象的第二个元素赋值。

相关文章