双端队列容器是一种放松了访问权限的队列。除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问。

它提供了直接访问和顺序访问方法。其头文件为<deque>。

1)双端队列容器的构造函数

有4中形式的构造函数:

deque();//构造size()为0的双端队列容器

deque(size_type n,const T& v=T());//初始化大小为n的双端队列,第二个参数是每个元素的初始值,默认为T()构造的对象

deque(const deque& x);//拷贝构造函数,用双端队列x来初始化此双端队列容器

deque(const_iterator first,const_iterator last);//从另一个支持const_iterator的容器中选取一部分来建立一个新的双端队列容器。

2)使用双端队列容器

a、访问双端队列容器信息

对于双端队列容器,

size()返回双端队列容器中元素的个数;

max_size()返回双端队列容器中最多可以容纳元素的个数;

empty()当双端队列中没有元素时,则返回true

b、向双端队列容器中放置元素

有以下方法可以把元素放入双端队列容器中:构造函数、push_back()方法、insert()方法、[]运算符、=运算符、swap函数。还有push_front函数,其原型为:

void push_front(const T& x);//将元素x添加在双端队列容器头部

c、删除双端队列容器中的元素

使用pop_back()、pop_front()、erase()、clear()可以从双端队列中删除元素,与向量容器相比,多了一个pop_front()函数,其原型:

void pop_front();//删除双端队列容器中的最前端元素

d、访问双端队列容器中的元素

双端队列容器即可以顺序访问也可以直接访问。双端队列容器中的元素可以联合使用pop_front()、pop_back()、front()、back()成员函数进行顺序访问,也可以使用迭代器来顺序遍历双端队列。由于支持随机访问迭代器,所以可以进行随机访问。

e、例子

使用双端队列容器保存双精度数值序列

#include<iostream>
#include<deque>  //包含双端队列容器头文件
#include<algorithm>//包含算法头文件
#include<iterator>
using namespace std;
int main()
{
 deque<double> values;//声明一个双精度型deque序列容器
 ostream_iterator<double> output(cout," ");
 values.push_front(2.2);//应用函数push_front在deque容器开头插入元素
 values.push_front(3.5);
 values.push_back(1.1);//应用函数push_back在deque同期结尾插入元素
 cout << "values contains:";
 for (int i = 0; i < values.size(); ++i)
  cout << values[i] << ' ';
 values.pop_front();//应用函数push_front从deque容器中删除第一个元素
 cout << "\nafter pop_front values contains:";
 copy(values.begin(),values.end(),output);
 values[1] = 5.4;//用用操作符[]来重新赋值
 cout << "\nafter values[1]=5.4 values contains:";
 copy(values.begin(), values.end(), output);
 getchar();
 cout << endl;
}

8、泛型程序设计与c++标准模板库2.3双端队列容器的更多相关文章

  1. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

  2. 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器

    顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...

  3. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  4. C++学习笔记53:泛型程序设计与C++标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

  5. 8、泛型程序设计与c++标准模板库2.5容器适配器

    容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类.他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器. 1.标准栈容器 使用STL中的标准栈为程序员提供了一层附加的 ...

  6. 8、泛型程序设计与c++标准模板库5.函数对象

    1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓“函数对象”其实就是一个行为类似函数的对象, ...

  7. 8、泛型程序设计与c++标准模板库3.迭代器

    理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指 ...

  8. 8、泛型程序设计与c++标准模板库2.2向量容器

    向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问).这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的.而面向对象的向量是动态结构 ...

  9. 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构

随机推荐

  1. 【leetcode刷题笔记】Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  2. A股牛蹄板块轮动迹象

    2018年10月熊市末期牛市初期 1.券商 2.中小银行 3.稀土永磁 4.铁路基建 5.人工智能 6.电器仪表 7.保险 8.非进金融.供热供气

  3. Blog迁移至Jekyll

    后续的Blog都将在 http://zhwbqd.github.io/ 为您呈现

  4. php设计模式课程---6、策略模式如何使用

    php设计模式课程---6.策略模式如何使用 一.总结 一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计 从饭店有特色过渡到厨师有特色(南方厨师(南方饭 ...

  5. 英语发音规则---发/i:/的字母及字母组合

    英语发音规则---发/i:/的字母及字母组合 一.总结 一句话总结: 1.字母组合ee发/iː/? bee beef see agree week meeting feel sweet free be ...

  6. 问题杂烩(scrollTop/背景透明度动画)

    今天给同学找我帮忙写js,是公司里的活..我是不是应该跟他要钱哈哈,不过一顿饭肯定是免不了的了. 言归正传,今天写了三个小东西,因为兼容性的问题,用jq写的(很是别扭的说,但是没办法啊,一边看api一 ...

  7. 【Codeforces】Gym 101173B Bipartite Blanket 霍尔定理+状压DP

    题意 给一张$n\times m$二分图,带点权,问有多少完美匹配子集满足权值和大于等于$t$ 这里有一个结论:对于二分图$\mathbb{A}$和$\mathbb{B}$集合,如果子集$A \in ...

  8. ACM学习历程—HDU 5534 Partial Tree(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...

  9. Popular Cows

    传送门(poj):http://poj.org/problem?id=2186 (bzoj):http://www.lydsy.com/JudgeOnline/problem.php?id=1051 ...

  10. 洛谷【P1104】生日(插入排序版)

    题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲插入排序的. 所谓插入排序,就是从待排序数组不断将数据插入答案数组里. 假设 ...