一、前言
deque 是 double-ended queue 的缩写,又称双端队列容器。deque 容器和 vecotr 容器有很多相似之处:
①deque 容器也善于在序列尾部增加或删除元素(工夫复杂度为 O(1)),而不善于在序列两头增加或删除元素
②deque 容器也能够依据须要批改本身的容量和大小
与 vector 不同的是:deque 还善于在序列头部增加或删除元素,所消耗的工夫复杂度也为常数阶 O(1)。deque 容器中存储元素并不能保障所有元素都存储到间断的内存空间中。
当须要向序列两端频繁的增加或删除元素时,应首选 deque 容器。deque 容器以模板类 deque<T>(T 为存储元素的类型)的模式在 <deque> 头文件中,并位于 std 命名空间中。因而,在应用该容器之前,代码中须要蕴含上面两行代码:
#include <deque>
using namespace std;
二、详解
1、初始化 deque 容器
①std::deque<int> d;
②std::deque<int> d(10);
③std::deque<int> d(10, 5);
④std::deque<int> d2(d);
⑤// 拷贝一般数组,创立 deque 容器
int a[] = { 1,2,3,4,5};
std::deque<int>d(a, a + 5);
⑥// 实用于所有类型的容器
std::array<int, 5>arr{11,12,13,14,15};
std::deque<int>d(arr.begin()+2, arr.end());// 拷贝 arr 容器中的{13,14,15}
①创立空的 deque 容器,和空 array 容器不同,空的 deque 容器在创立之后能够做增加或删除元素的操作
②创立一个具备 10 个元素、元素默认值为 0 的 deque 容器
③创立一个具备 10 个元素的 deque 容器,指定初始值为 5 的 deque 容器
④拷贝初始化 deque 容器 d2,须要保障新旧容器存储的元素类型统一
2、成员函数
函数 | 性能 |
---|---|
begin() | 返回指向容器中第一个元素的迭代器 |
end() | 返回指向容器最初一个元素所在位置后一个地位的迭代器,通常和 begin() 联合应用 |
rbegin() | 返回指向最初一个元素的迭代器 |
rend() | 返回指向第一个元素所在位置前一个地位的迭代器 |
cbegin() | 和 begin() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素 |
cend() | 和 end() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素 |
crbegin() | 和 rbegin() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素 |
crend() | 和 rend() 性能雷同,只不过在其根底上,减少了 const 属性,不能用于批改元素 |
size() | 返回理论元素个数 |
max_size() | 返回容器所能包容元素个数的最大值,个别是 232-1 |
resize() | 扭转理论元素的个数 |
empty() | 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false |
shrink _to_fit() | 将内存缩小到等于以后元素理论所应用的大小 |
at() | 应用通过边界查看的索引拜访元素 |
front() | 返回第一个元素的援用 |
back() | 返回最初一个元素的援用 |
assign() | 用新元素替换原有内容 |
push_back() | 在序列的尾部增加一个元素 |
push_front() | 在序列的头部增加一个元素 |
pop_back() | 移除容器尾部的元素 |
insert() | 在指定的地位插入一个或多个元素 |
erase() | 移除一个元素或一段元素 |
clear() | 移出所有的元素,容器大小变为 0 |
swap() | 替换两个容器的所有元素 |
emplace() | 在指定的地位间接生成一个元素 |
emplace_front() | 在容器头部生成一个元素。和 push_front() 的区别是,该函数间接在容器头部结构元素,省去了复制挪动元素的过程 |
emplace_back() | 在容器尾部生成一个元素。和 push_back() 的区别是,该函数间接在容器尾部结构元素,省去了复制挪动元素的过程 |
std::swap(x , y) | 非成员函数,替换数据 |
阐明:与 vector 相比,额定减少了实现在容器头部增加和删除元素的成员函数,同时删除了 capacity()、reserve() 和 data() 成员函数。
三、实例
1、初始化
// 初始化 deque
// 拷贝一般数组,创立 deque 容器
int a[] = { 10,25,37,40,15};
std::deque<int> dequeInt(a, a + 5);
// 下标拜访
for (int i = 0; i < dequeInt.size(); i++)
{std::cout << "dequeInt[" << i << "]=" << dequeInt[i] << std::endl;
}
std::cout << "dequeInt size:" << dequeInt.size() << std::endl;
// 迭代器拜访
int i = 0;
std::deque<int>::iterator dequeIter = dequeInt.begin();
for (; dequeIter != dequeInt.end(); dequeIter++)
{std::cout << "iterator dequeInt[" << i << "]=" << *dequeIter << std::endl;
}
std::cout << "iterator dequeInt size:" << dequeInt.size() << std::endl;
dequeInt.push_front(190);
dequeInt.push_back(9001);
for (int i = 0; i < dequeInt.size(); i++)
{std::cout << "push_front and push_back dequeInt[" << i << "]=" << dequeInt[i] << std::endl;
}
std::cout << "push_front and push_back dequeInt size:" << dequeInt.size() << std::endl;
后果如下: