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 {,,,,}; deque<int>::iterator it; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

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

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

1

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

operator=赋值运算符重载

1

deque<int> d1 {,,,,},d2; d2 = d1; deque<int>::iterator it; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl;

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

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

 1

deque<int> d1 {,,,,},d2; d2.assign(, ); deque<int>::iterator it; cout << "d2.assign(n,num):"; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } d2.assign(d1.begin(), d1.begin()+); cout << "d2.assign(beg,end):"; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl;

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

1

deque<int> d {,,,,}; cout << "d.at(pos):" << d.at(); return ;

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

1

deque<int> d {,,,,}; cout << "d[2]:" << d[]; return ;

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

1

deque<int> d {,,,,}; if(!d.empty()){ cout << "d is not empty!" << endl; }else{ cout << "d is empty!" << endl; } return ;

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

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

1

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

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

1

deque<int> d {,,,,}; cout << "d.size():" << d.size() << endl; return ;

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

1

deque<int> d {,,,,}; cout << "d.max_size():" << d.max_size() << endl; return ;

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

 1

deque<int> d {,,,,}; deque<int>::iterator it; cout << "clear before:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.clear(); cout << "clear after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } 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 {,,,,}; deque<int>::iterator it; cout << "insert before:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.insert(d.end(),); d.insert(d.end(), ,); int a[] = {,,,,}; d.insert(d.begin(),a,a+); cout << "insert after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

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

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

 1

deque<int> d {,,,,}; d.erase(d.begin()); deque<int>::iterator it; cout << "erase(pos) after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.erase(d.begin(), d.begin()+); cout << "erase(beg,end) after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

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

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

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

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

 1

deque<int> d {,,,,}; d.push_back(); deque<int>::iterator it; cout << "push_back(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.pop_back(); cout << "pop_back(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.push_front(); cout << "push_front(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.pop_front(); cout << "pop_front(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; return ;

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

 1

deque<int> d {,,,,}; cout << "d.size():" << d.size() << endl; d.resize(d.size()+); cout << "d.resize() after:" << d.size() <<endl; deque<int>::iterator it; cout << "resize() after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

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

swap(c1,c2)同上。

 1

deque<int> d1 {,,,,},d2,d3; d1.swap(d2); deque<int>::iterator it; cout << "d1 swap after:" ; for(it=d1.begin();it!=d1.end();it++){ cout << *it << " "; } cout << endl; cout << "d2 swap after:" ; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl; swap(d3,d2); cout << "d3 swap after:" ; for(it=d3.begin();it!=d3.end();it++){ cout << *it << " "; } cout << endl;

重载运算符

operator==

operator!=

operator<

operator<=

operator>

operator>=

STL deque用法的更多相关文章

  1. 浅谈C++ STL deque 容器

    浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...

  2. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  3. STL deque详解

    英文原文:http://www.codeproject.com/Articles/5425/An-In-Depth-Study-of-the-STL-Deque-Container 绪言 这篇文章深入 ...

  4. STL Deque 容器

    STL Deque 容器 Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双 端的,而vector是单端的.         ...

  5. STL之deque用法详解

    C++ Deque(双向队列): Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用 ...

  6. STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

      list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...

  7. STL:deque用法详解

    deque函数: deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和 ...

  8. STL之三:deque用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8519812 deque函数: deque容器为一个给定类型的元素进行线性处理,像向量 ...

  9. STL之deque用法

    deque:双端队列 底层是一个双向链表. 常用的有队列的尾部入队.首部出队. 普通队列:queuequeue 模板类的定义在<queue>头文件中.与stack 模板类很相似,queue ...

随机推荐

  1. redhat7.0安装ifconfig

    问题描述: Setup is unable to find the "ifconfig" program on your machine. Please make sure it ...

  2. 解决CSS的position:absolute中left效果

    有时候css中设置了position:absolute,left:100px,但是如果我们不想要这个left怎么办呢,当然你直接删除就可以,但是如果是框架的css,你直接删除就有问题了,这时候该怎么办 ...

  3. CSS3 flex的使用方法

    display:flex; align-items://水平对齐方式 justify-content://垂直对齐方式 flex://盒子所占大小(如果你盒子里面只有两个div,那么你设置其中之一个f ...

  4. 软件申请获取root权限

      申请root的工具类 //获取root权限 RootManager manager=new RootManager(); manager.upgradeRootPermission(getPack ...

  5. (原)InsightFace及其mxnet代码

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/8525287.html 论文 InsightFace : Additive Angular Margin ...

  6. keras的训练引擎:train_array.py和train_generator.py

    keras的Model支持两种模式的训练: 直接传入数组,最终会调用train_array.py中的fit_loop()函数 直接传入生成器,最终会调用train_generator.py中的fit_ ...

  7. unix环境高级编程 读书笔记

    1.上班业余时间把书下载下来,第一章读完了,但是程序只能回家运行啦!Fighting!

  8. 【C++】atoi与stoi

    stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error.atoi函数则不做范围检查,若超过int范围,则显示-214 ...

  9. jenkins和gitlab结合的时候出错

    Started by user zhaoliang Building in workspace /var/lib/jenkins/workspace/ZuoYeah_Static_Production ...

  10. Nginx 504 Gateway Time-out问题解决

    今天站群VPS上面的所有站出现的 504 网关错误,现在小色还是菜菜的,斗胆解决下.在网上面搜解决方案,尝试设置ngxin的fast-cgi_buffers 和重启ngxin来解决,但是错误依旧.怀疑 ...