我是靠谱客的博主 如意日记本,最近开发中收集的这篇文章主要介绍STL 之 deque容器详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Deque 容器

deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。

使用deque容器之前必须加上<deque>头文件:#include<deuqe>;

       deque属于std命名域的内容,因此需要通过命名限定:using std::deque;也可以直接使用全局的命名空间方式:using namespace std;

 

构造函数

  deque<Elem> c 创建一个空的deque

  deque<Elem> c1(c2) 复制一个deque。

  deque<Elem> c(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。

  deque<Elem> c(n, elem) 创建一个含有n个elem拷贝的deque。

  deque<Elem> c(beg,end) 创建一个以[beg;end)区间的deque。

  ~deque<Elem>() 销毁所有数据,释放内存。

 

成员函数

c.begin()返回指向第一个元素的迭代器

c.end()返回指向最后一个元素下一个位置的迭代器

1
deque<int> d {1,2,3,4,5};
2
deque<int>::iterator it;
3
for(it=d.begin();it!=d.end();it++){
4
cout << *it << " ";
5 
}
6
cout << endl;

c.rbegin()返回指向反向队列的第一个元素的迭代器(即原队列的最后一个元素)

c.rend()返回指向反向队列的最后一个元素的下一个位置(即原队列的第一个元素的前一个位置)

1
deque<int> d {1,2,3,4,5};
2
deque<int>::reverse_iterator it;
3
for(it=d.rbegin();it!=d.rend();it++){
4
cout << *it << " ";
5 
}
6
cout << endl;

operator=赋值运算符重载

复制代码
1
deque<int> d1 {1,2,3,4,5},d2;
2
d2 = d1;
3
deque<int>::iterator it;
4
for(it=d2.begin();it!=d2.end();it++){
5
cout << *it << " ";
6 
}
7
cout << endl;
复制代码

c.assign(n,num)将n个num拷贝复制到容器c

c.assign(beg,end)将[beg,end)区间的数据拷贝复制到容器c

复制代码
 1
deque<int> d1 {1,2,3,4,5},d2;
 2
d2.assign(2, 8);
 3
deque<int>::iterator it;
 4
cout << "d2.assign(n,num):";
 5
for(it=d2.begin();it!=d2.end();it++){
 6
cout << *it << " ";
 7 
}
 8
d2.assign(d1.begin(), d1.begin()+3);
 9
cout << "d2.assign(beg,end):";
10
for(it=d2.begin();it!=d2.end();it++){
11
cout << *it << " ";
12 
}
13
cout << endl;
复制代码

c.at(pos)返回索引为pos的位置的元素,会执行边界检查,如果越界抛出out_of_range异常

1
deque<int> d {1,2,3,4,5};
2
cout << "d.at(pos):" << d.at(2);
3
return 0;

c.operator[]下标运算符重载

1
deque<int> d {1,2,3,4,5};
2
cout << "d[2]:" << d[2];
3
return 0;

c.empty()判断c容器是否为空

复制代码
1
deque<int> d {1,2,3,4,5};
2
if(!d.empty()){
3
cout << "d is not empty!" << endl;
4
}else{
5
cout << "d is empty!" << endl;
6 
}
7
return 0;
复制代码

c.front()返回c容器的第一个元素

c.back()返回c容器的最后一个元素

1
deque<int> d {1,2,3,4,5};
2
if(!d.empty()){
3
cout << "d.front():" << d.front() << endl;
4
cout << "d.back(): " << d.back() << endl;
5
}

c.size()返回c容器中实际拥有的元素个数

1
deque<int> d {1,2,3,4,5};
2
cout << "d.size():" << d.size() << endl;
3
return 0;

c.max_size()返回c容器可能存放元素的最大数量

1
deque<int> d {1,2,3,4,5};
2
cout << "d.max_size():" << d.max_size() << endl;
3
return 0;

c.clear()清除c容器中拥有的所有元素

复制代码
 1
deque<int> d {1,2,3,4,5};
 2
deque<int>::iterator it;
 3
cout << "clear before:" ;
 4
for(it=d.begin();it!=d.end();it++){
 5
cout << *it << " ";
 6 
}
 7
cout << endl;
 8 
d.clear();
 9
cout << "clear after:" ;
10
for(it=d.begin();it!=d.end();it++){
11
cout << *it << " ";
12 
}
13
cout << endl;
复制代码

c.insert(pos,num)在pos位置插入元素num

c.insert(pos,n,num)在pos位置插入n个元素num

c.insert(pos,beg,end)在pos位置插入区间为[beg,end)的元素

复制代码
 1
deque<int> d {1,2,3,4,5};
 2
deque<int>::iterator it;
 3
cout << "insert before:" ;
 4
for(it=d.begin();it!=d.end();it++){
 5
cout << *it << " ";
 6 
}
 7
cout << endl;
 8
d.insert(d.end(),22);
 9
d.insert(d.end(), 3,88);
10
int a[5] = {1,2,3,4,5};
11
d.insert(d.begin(),a,a+3);
12
cout << "insert after:" ;
13
for(it=d.begin();it!=d.end();it++){
14
cout << *it << " ";
15 
}
16
cout << endl;
复制代码

c.erase(pos)删除pos位置的元素c.erase(beg,end)删除区间为[beg,end)的元素

c.erase(beg,end)删除区间为[beg,end)之间的元素

复制代码
 1
deque<int> d {1,2,3,4,5};
 2 
d.erase(d.begin());
 3
deque<int>::iterator it;
 4
cout << "erase(pos) after:" ;
 5
for(it=d.begin();it!=d.end();it++){
 6
cout << *it << " ";
 7 
}
 8
cout << endl;
 9
d.erase(d.begin(), d.begin()+3);
10
cout << "erase(beg,end) after:" ;
11
for(it=d.begin();it!=d.end();it++){
12
cout << *it << " ";
13 
}
14
cout << endl;
复制代码

c.push_back(num)在末尾位置插入元素

c.pop_back()删除末尾位置的元素

c.push_front(num)在开头位置插入元素

c.pop_front()删除开头位置的元素

复制代码
 1
deque<int> d {1,2,3,4,5};
 2
d.push_back(10);
 3
deque<int>::iterator it;
 4
cout << "push_back(num):" ;
 5
for(it=d.begin();it!=d.end();it++){
 6
cout << *it << " ";
 7 
}
 8
cout << endl;
 9
10 
d.pop_back();
11
cout << "pop_back(num):" ;
12
for(it=d.begin();it!=d.end();it++){
13
cout << *it << " ";
14 
}
15
cout << endl;
16
17
d.push_front(10);
18
cout << "push_front(num):" ;
19
for(it=d.begin();it!=d.end();it++){
20
cout << *it << " ";
21 
}
22
cout << endl;
23
24 
d.pop_front();
25
cout << "pop_front(num):" ;
26
for(it=d.begin();it!=d.end();it++){
27
cout << *it << " ";
28 
}
29
cout << endl;
30
return 0;
复制代码

 

c.resize(num)从新定义容器的大小

复制代码
 1
deque<int> d {1,2,3,4,5};
 2
cout << "d.size():" << d.size() << endl;
 3
d.resize(d.size()+5);
 4
cout << "d.resize() after:" << d.size() <<endl;
 5
deque<int>::iterator it;
 6
cout << "resize() after:" ;
 7
for(it=d.begin();it!=d.end();it++){
 8
cout << *it << " ";
 9 
}
10
cout << endl;
复制代码

c1.swap(c2)交换容器c1,c2;

swap(c1,c2)同上。

复制代码
 1
deque<int> d1 {1,2,3,4,5},d2,d3;
 2 
d1.swap(d2);
 3
deque<int>::iterator it;
 4
cout << "d1 swap after:" ;
 5
for(it=d1.begin();it!=d1.end();it++){
 6
cout << *it << " ";
 7 
}
 8
cout << endl;
 9
cout << "d2 swap after:" ;
10
for(it=d2.begin();it!=d2.end();it++){
11
cout << *it << " ";
12 
}
13
cout << endl;
14
15 
swap(d3,d2);
16
cout << "d3 swap after:" ;
17
for(it=d3.begin();it!=d3.end();it++){
18
cout << *it << " ";
19 
}
20
cout << endl;
复制代码

 

 

重载运算符

operator==

operator!=

operator<

operator<=

operator>

operator>=

分类: STL 容器
好文要顶 关注我 收藏该文
Sam大叔
关注 - 0
粉丝 - 11
+加关注
0
0
« 上一篇: STL之list容器详解
» 下一篇: 单例模式

最后

以上就是如意日记本为你收集整理的STL 之 deque容器详解的全部内容,希望文章能够帮你解决STL 之 deque容器详解所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部