8、泛型程序设计与c++标准模板库2.3双端队列容器
双端队列容器是一种放松了访问权限的队列。除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问。
它提供了直接访问和顺序访问方法。其头文件为<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双端队列容器的更多相关文章
- 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语
有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...
- 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器
顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...
- 8、泛型程序设计与c++标准模板库4.标准c++库中的算法
标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...
- C++学习笔记53:泛型程序设计与C++标准模板库
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...
- 8、泛型程序设计与c++标准模板库2.5容器适配器
容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类.他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器. 1.标准栈容器 使用STL中的标准栈为程序员提供了一层附加的 ...
- 8、泛型程序设计与c++标准模板库5.函数对象
1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓“函数对象”其实就是一个行为类似函数的对象, ...
- 8、泛型程序设计与c++标准模板库3.迭代器
理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指 ...
- 8、泛型程序设计与c++标准模板库2.2向量容器
向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问).这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的.而面向对象的向量是动态结构 ...
- 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构
随机推荐
- AJAX请求时status返回状态明细表
AJAX请求时status返回状态明细表 readyState的五种状态2010-03-04 18:24对于readyState的五种状态的描述或者说定义,很多Ajax书(英文原版)中大都语焉不详 在 ...
- 更改ubuntu主机名称
vim /etc/hostname 将root更改为admin vim /etc/passwd
- jquery详解图片平滑滚动
jquery详解图片平滑滚动 随便写了个DOM,没有美观性,见谅 原理: 1.定义两组ul列表放图,第一个ul放5张图,第二个ul为空 2.为什么要用两个ul?因为要用到jQuery的克隆方法clon ...
- Codeforces 366C Dima and Salad:背包dp
题目链接:http://codeforces.com/problemset/problem/366/C 题意: 有n个物品,每个物品有两个属性a[i]和b[i]. 给定k,让你选出一些物品,使得 ∑ ...
- spring学习(5)
bean配置 启用注解 <context:annotation-config/> 使用spring的特殊bean 对bean BeanPostProcessor spring本身提供的特殊 ...
- Delphi考虑sql注入 QuotedStr
之前只在BS架构的项目中考虑了Sql注入问题,却很少考虑到用了多年的Delphi项目也应该考虑Sql注入的问题,今天做了个实验,成功完成注入,把表里数据全部删除,以后再做Delphi项目还真的考虑这个 ...
- Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。
转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然 ...
- ajax(异步页面动态刷新)
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ...
- 如何在MySQL中查询当前数据上一条和下一条的记录
如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...
- 使用命令行生成 APNG 图片
使用 apngasm 工具 下载地址 https://sourceforge.net/projects/apngasm/files/2.91/ 本地源码编译 make 或者 下载对应环境的可执行程序 ...