我是靠谱客的博主 追寻墨镜,最近开发中收集的这篇文章主要介绍deque,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

deque 是 double-ended queue 的缩写,又称双端队列容器。

前面章节中,我们已经系统学习了 vector 容器,值得一提的是,deque 容器和 vecotr 容器有很多相似之处,比如:
deque 容器也擅长在序列尾部添加或删除元素(时间复杂度为O(1)),而不擅长在序列中间添加或删除元素。
deque 容器也可以根据需要修改自身的容量和大小。

和 vector 不同的是,deque 还擅长在序列头部添加或删除元素,所耗费的时间复杂度也为常数阶O(1)。并且更重要的一点是,deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。

当需要向序列两端频繁的添加或删除元素时,应首选 deque 容器。

容器之前,代码中需要包含下面两行代码:

#include <deque>
using namespace std;

注意,std 命名空间也可以在使用 deque 容器时额外注明,两种方式都可以。

deque容器可利用的成员函数
基于 deque 双端队列的特点,该容器包含一些 array、vector 容器都没有的成员函数。


表 1 中罗列了 deque 容器提供的所有成员函数。
表 1deque 容器的成员函数
函数成员函数功能
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()移除容器尾部的元素。
pop_front()移除容器头部的元素。
insert()在指定的位置插入一个或多个元素。
erase()移除一个元素或一段元素。
clear()移出所有的元素,容器大小变为 0。
swap()交换两个容器的所有元素。
emplace()在指定的位置直接生成一个元素。
emplace_front()在容器头部生成一个元素。和 push_front() 的区别是,该函数直接在容器头部构造元素,省去了复制移动元素的过程。
emplace_back()在容器尾部生成一个元素。和 push_back() 的区别是,该函数直接在容器尾部构造元素,省去了复制移动元素的过程。

和 vector 相比,额外增加了实现在容器头部添加和删除元素的成员函数,同时删除了 capacity()、reserve() 和 data() 成员函数。

和vector相比,额外增加了实现在容器头部添加和删除元素的成员函数,同时删除了 capacity()、reserve() 和 data() 成员函数。

代码演示

#include<iostream>
#include<vector>
#include <deque>
#include<cstdio>
#include<string>
using namespace std;
void out_all(deque<int> &d) {
for (int i = 0; i < d.size(); i++) {
cout << d[i] <<
" ";
}
cout << endl << endl;
}
int main() {
deque<int> d{1, 2, 3, 4, 5, 6, 7, 8, 9};
out_all(d);
cout << "pop_back(): " << endl;
d.pop_back();
out_all(d);
cout << "pop_front() : " << endl;
d.pop_front();
out_all(d);
cout << "emplace_back(2)" << endl;
d.emplace_back(2);
out_all(d);
cout << "emplace_front(6)" << endl;
d.emplace_front(6);
out_all(d);
cout << "push_front(7) :" << endl;
d.push_front(7);
out_all(d);
cout << "push_back(55) : " << endl;
d.push_back(55);
out_all(d);
return 0;
}

运行效果

1 2 3 4 5 6 7 8 9
pop_back():
1 2 3 4 5 6 7 8
pop_front() :
2 3 4 5 6 7 8
emplace_back(2)
2 3 4 5 6 7 8 2
emplace_front(6)
6 2 3 4 5 6 7 8 2
push_front(7) :
7 6 2 3 4 5 6 7 8 2
push_back(55) :
7 6 2 3 4 5 6 7 8 2 55

最后

以上就是追寻墨镜为你收集整理的deque的全部内容,希望文章能够帮你解决deque所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部