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. mtr网络连通性测试

    01.mtr命令 yum install -y   mtr [root@jiao ~]# mtr --helpusage: mtr [-hvrwctglspniu46] [--help] [--ver ...

  2. 基于RecyclerView实现的分组显示信息demo

    发布时间:2018-11-07   技术:Android Studio 3.1.3+ RecyclerView+sectionRecyclerViewAdapter   概述 利用sectionedR ...

  3. [转载]virtualbox安装64bit客户机

    原文地址:virtualbox安装64bit客户机作者:kunth 1.虚拟64bit客户机 (1)安装virualbox (2)bios设置 supports virtualization为able ...

  4. MATLAB 设置文件的相对路径

    加载文件使用命令:load(' 文件名 or 文件路径 ') 1.文件在当前路径下: 直接  load('session.mat') 2.文件在下一级路径下: 使用  load (' .\下一级路径的 ...

  5. suricate学习笔记1--初步认识(转)

    最近在研究关于dpi网卡采集的代码重组这块,公司一个同事,简单的用CPP讲解了suricata内部的一些处理逻辑,,,其中大部分代码是用C语言写的,对于用C重构代码有很好的借鉴作用,,,如果有相关工作 ...

  6. 【SqlServer】如何把本地SqlServer数据库部署到远程服务器上

    这里笔者使用的使用SqlServer2012,本机和远程环境均为Win7. 1.选中需要部署的数据库,右击>任务>分离.选中删除连接. 2.现在在左侧的表中就看不见刚才那个数据了. 3.在 ...

  7. 【jsp】Servlet与jsp之间的传值

    Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP. 通过对象 request和 session (不考虑 application) ...

  8. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  9. Mac添加快捷键开启应用程序(转)

    最近使用终端比较多点,打开终端的方法有几种:比较常用有把终端添加到Dock栏上,然后就是利用Spotlight搜索Terminal来打开.但是两种方式还是让我感觉不太满意. 当开启的程序比较多的时候, ...

  10. Oracle 12C -- 设置CDB启动后,PDBs自动启动

    CDB重启后,PDBs默认是处于mounted状态 SQL> select name,open_mode from v$pdbs; NAME OPEN_MODE ---------------- ...