deque与vector很相似,不仅能够在尾部插入和删除元素,还能够在头部插入和删除。

只是当考虑到容器元素的内存分配策略和操作性能时。deque相对vector较为有优势。

头文件

#include<deque>

创建deque对象

1)deque();//创建一个没有不论什么元素的deque对象。

deque<int> d

2)deque(size_typen);//创建一个具有n个元素的deque对象。每一个元素採用它的类型下的默认值。

deque<int> d(10);//deque对象d有10个元素,每一个元素初始值为0。

3)deque<size_type n, constT& value); //创建一个具有n个元素的deque对象,这些元素的初始值为value。

deque<double> d(10,5);

4)deque(const deque&);//deque的拷贝构造函数,通过拷贝一个deque对象的元素值。创建一个新的deque对象。

deque<char> d1(5,’a’);
deque<char> d2(d1);

5)deque(constInputIterator first, const InputIterator last, const A& a=A());

//将迭代区间[first,last)所指的元素复制到一个新创建的deque对象中,当中内存分配器可缺省。

//利用int数组iArray,创建一个deque对象d
int iArray[]={1,2,3,4,5,6,7};
deque<int> d(iArray, iArray+7);

初始化赋值

利用deque提供的push_back()函数,可在尾部压入新元素value。经常使用作deque容器的初始化赋值。

元素的遍历訪问

分别用数组方式和迭代器方式訪问deque元素。

#include <deque>
#include <iostream>
using namespace std;
int main(void)
{
deque<int> d;
int i;
d.push_back(13);
d.push_back(32);
d.push_back(29);
cout<<"数组方式訪问deque元素:"<<endl;
for(i=0; i < d.size(); i++)
cout << "d[" << i << "] = " << d[i] << endl;
deque<int>::iterator j,jend;//定义迭代器
jend=d.end();
cout<<"迭代器訪问deque元素:"<<endl;
for (i=0,j=d.begin(); j!=jend;i++,j++)
{
cout << "d[" << i << "] = " << *j << endl;
}
return 0;
}

元素的插入

因为deque使用了两个迭代器分别指向双端队列的首尾,因此deque具有高效的头部插入元素的函数push_front()。中间位置的插入用insert()函数。

void push_front(constT&);//头部插入

iterator insert(iterator pos, const T& x);//pos位置之前,插入新元素x

#include <deque>
#include <iostream>
using namespace std;
int main(void)
{
deque<int> d;
d.push_back(6);
d.push_back(7);
//头部插入
d.push_front(5);
for(int i=0; i<d.size(); i++) //打印6 7
cout << d[i] << ' ';
cout << endl;
//中间位置插入
d.insert(d.begin() +1 ,9); //在第个元素前插入,即9 6 7
for(int j=0; j<d.size(); j++)
cout << d[j] << ' ';
cout << endl;
return 0;
}

元素的删除

deque容器提供了删除首元素的pop_front函数。删除尾元素的pop_back函数。删除任何位置或迭代区间上元素的erase函数。以及删除全部元素的clear函数。

1)void pop_front();//删除deque的第一个元素

2)void pop_back();//删除deque的最后一个元素

3)iterator erase(iteratorpos); //删除pos所指向的元素

4)iterator erase(iterator first, iterator last);//删除迭代区间[first,last)所指向的全部元素

5)void clear();//删除全部元素

#include <deque>
#include <iostream>
using namespace std;
int main(void)
{
deque<int> d;
d.push_back(4);
d.push_back(5);
d.push_back(1);
d.push_back(1);
d.push_back(1);
d.push_back(6);
for(int i=0; i<d.size(); i++)
cout << d[i] << ' ' ;
cout << endl;
//头尾和任何位置删除元素
d.erase(d.begin() +1);
d.pop_front();
d.pop_back();
for(int j=0; j<d.size(); j++)
cout << d[j] << ' ' ;
cout << endl;
//删除所有元素
d.clear();
cout << "运行clear()" <<endl << "deque元素所有清除" << endl;
return 0;
}

其它函数与vector容器相似,这里不再赘述。详细可看前篇vector的应用

此文为本人原创。转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/46737877

stl之deque双端队列容器的更多相关文章

  1. deque双端队列容器

    //deque双端队列容器 //deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector不同的是, //deque采用的分块线性存储结构来存储数据,每块的大小一般为512字节 ...

  2. C++STL之双端队列容器

    C++STL之双端队列容器 deque双端队列容器与vector很类似,采用线性表顺序存储结构.但与vector区别,deque采用分块的线性存储结构来存储数据,每块的大小一般为512B,将之称为de ...

  3. STL容器:deque双端队列学习

    所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...

  4. 8、泛型程序设计与c++标准模板库2.3双端队列容器

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

  5. deque双端队列笔记

    clear()clear()clear():清空队列 pushpushpush_back()back()back():从尾部插入一个元素. pushpushpush_front()front()fro ...

  6. Java 集合深入理解(10):Deque 双端队列

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...

  7. c++ deque 双端队列

    双端队列: 函数 描述 c.assign(beg,end)c.assign(n,elem)  将[beg; end)区间中的数据赋值给c.将n个elem的拷贝赋值给c. c.at(idx)  传回索引 ...

  8. 算法-deque双端队列

    Python的deque模块,它是collections库的一部分.deque实现了双端队列,意味着你可以从队列的两端加入和删除元素 1.基本介绍 # 实例化一个deque对象d = deque()d ...

  9. deque双端队列(常用方法总结)

    /*关于C++ STL中deque的学习*/ #include<cstdio> #include<iostream> #include<deque> using n ...

随机推荐

  1. php的curl获取https加密协议请求返回json数据进行信息获取

    <?php header("Content-type:text/html; charset=utf-8");function getToken($url){        $ ...

  2. HDU 2986 Ballot evaluation(精度问题)

    点我看题目 题意 : 给你n个人名,每个名后边跟着一个数,然后m个式子,判断是否正确. 思路 :算是一个模拟吧,但是要注意浮点数容易丢失精度,所以要好好处理精度,不知道多少人死在精度上,不过我实在是不 ...

  3. http://www.linuxidc.com/Linux/2015-02/114265.htm

    http://www.linuxidc.com/Linux/2015-02/114265.htm

  4. datetime 和 smalldatetime

    用于表示某天的日期和时间的数据类型. datetime 和 smalldatetime 表示某天的日期和时间. 数据类型 范围 精确度 datetime 1753 年 1 月 1 日到 9999 年 ...

  5. Introducing RecyclerView(一)

    RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好.接下来通过一系列的文章讲解如何使用RecyclerView ...

  6. C# :XML和JSON互转

    我们一般在用JSON或者XML作为数据交换的时候,可能定义一个没有真正意义方法的类,其实就是一个关于属性的数据结构,如果对于这种情况,可以将这个类对象作为中介,然后利用C#提供的序列化和反序列化的方法 ...

  7. bzoj3698

    显然是有源有汇有下界最大流,不刷不知道,一刷吓一跳发现了我之前求有源有汇有下界最大流的错误,具体见我那篇介绍有下界的网络流的解题报告(bzoj2502),已经更正 ; type node=record ...

  8. Poj3680 Intervals

    这题比较经典,题意大致上就是给你n个点和m个区间,每个区间有一个正权值,让你选出一些区间,使得每个点都不会被覆盖超过k次,且选出的区间权值和最大. -------------------------- ...

  9. 对easyUI中课堂源码编辑改进建议

    在孙宇老师讲得Easyui第10讲完后,基本的增删该查做出来了,但是编辑存在一个问题:行内样式编辑修改,如果当用户没有修改数据,孙宇老师讲得时候直接return,这样做是不合理的:第二次再使用右键编辑 ...

  10. 【 D3.js 选择集与数据详解 — 3 】 绑定数据的顺序

    data() 函数有两个参数,第一个是被绑定数据,第二个参数用于指定绑定的顺序.在数据需要更新的时候常常会用到. 默认的情况下,data()函数是按照索引号依次绑定数组各项的.第0个元素绑定数组的第0 ...