双端队列(deque容器类):

#include<deque>与vector 类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。
与vector不同的是:deque 还支持从开始端插入数据:push_front() 。
此外deque 不支持与vector 的capacity() 、reserve() 类似的操作。
deque,是“double-ended queue”的缩写。可以随机存取元素(用索引直接存取)。
数组头部和尾部添加或移除元素都非常快速,但是在中部安插元素比较费时。
本文地址:http://www.cnblogs.com/archimedes/p/cpp-deque-list.html,转载请注明源地址。
头文件  #include <deque>
定义变量  deque<int> mydeq;
主要成员函数
mydeq.clear()  移除容器中所有数据。
mydeq.push_front(elem)  在队列首部加入一个数据
mydeq.pop_front()  删除队列尾部数据
mydeq.push_back(elem)  在队列尾部加入一个数据
mydeq.pop_back()  删除队列尾部数据
mydeq.empty()  判断队列是否为空,为空返回true
mydeq.size()          返回容器中实际数据的个数。
mydeq.erase(pos)       删除pos位置的数据,返回下一个数据的位置。
mydeq.insert(pos,cnt,elem)  在pos位置插入cnt个数据elem。
mydeq.begin()     返回的指针指向数组中的第一个数据。
mydeq.end()        实际上是取末尾加一,以便让循环正确运行--它返回的指针指向最靠近数组界限的数据。
operator[]                返回容器中指定位置的一个引用
 
deque举例:
#include <iostream>
#include <deque>
using namespace std;
typedef deque<int> INTDEQUE;
// 从前向后显示deque 队列的全部元素
void put_deque(INTDEQUE deque, char *name)
{
INTDEQUE::iterator pdeque;// 仍然使用迭代器输出
cout << "The contents of " << name << " : ";
for(pdeque = deque.begin(); pdeque != deque.end(); pdeque++)
cout << *pdeque << " ";// 注意有 "*" 号哦,没有"*" 号的话会报错
cout<<endl;
}
// 测试deqtor 容器的功能
int main()
{
//deq1 对象初始为空
INTDEQUE deq1;
//deq2 对象最初有10 个值为6 的元素
INTDEQUE deq2(,);
// 声明一个名为i 的双向迭代器变量
INTDEQUE::iterator i;
// 从前向后显示deq1 中的数据
put_deque(deq1,"deq1");
// 从前向后显示deq2 中的数据
put_deque(deq2,"deq2");
// 从deq1 序列后面添加两个元素
deq1.push_back();
deq1.push_back();
cout<<"deq1.push_back(2) and deq1.push_back(4):"<<endl;
put_deque(deq1,"deq1");
// 从deq1 序列前面添加两个元素
deq1.push_front();
deq1.push_front();
cout<<"deq1.push_front(5) and deq1.push_front(7):"<<endl;
put_deque(deq1,"deq1");
// 在deq1 序列中间插入数据
deq1.insert(deq1.begin()+,,);
cout<<"deq1.insert(deq1.begin()+1,3,9):"<<endl;
put_deque(deq1,"deq1");
// 测试引用类函数
cout<<"deq1.at(4)="<<deq1.at()<<endl;
cout<<"deq1[4]="<<deq1[]<<endl;
deq1.at()=;
deq1[]=;
cout<<"deq1.at(1)=10 and deq1[2]=12 :"<<endl;
put_deque(deq1,"deq1");
// 从deq1 序列的前后各移去一个元素
deq1.pop_front();
deq1.pop_back();
cout<<"deq1.pop_front() and deq1.pop_back():"<<endl;
put_deque(deq1,"deq1");
// 清除deq1 中的第2 个元素
deq1.erase(deq1.begin()+);
cout<<"deq1.erase(deq1.begin()+1):"<<endl;
put_deque(deq1,"deq1");
// 对deq2 赋值并显示
deq2.assign(,);
cout<<"deq2.assign(8,1):"<<endl;
put_deque(deq2,"deq2");
}

链表(list容器类):

#include<list>,是一种双线性列表,只能顺序访问(从前向后或者从后向前)。
list 的数据组织形式
 
与前面两种容器类有一个明显的区别就是:它不支持随机访问。要访问表中某个下标处的项需要从表头或表尾处(接近该下标的一端)开始循环。而且缺少下标运算符:
operator[] 。
在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针。
 <list> 内部实现: 双向链表

list<T, Alloc>
支持操作:
begin(), end(), size(), clear(), empty()
push_back(), pop_back()
push_front(), pop_front()
insert()  O(1)
erase()  O(1)
sort()  O(nlogn),不同于<algorithm>中的sort
list仍然包含了erase(),begin(),end(),insert(),push_back(),push_front()这些基本函数,下面我们来演示一下list的其他函数功能。
merge():合并两个排序列表;
sort():列表的排序;
list举例:
#include <iostream>
#include <string>
#include <list>
using namespace std;
void PrintIt(list<int> n) {
for (list<int>::iterator iter = n.begin(); iter != n.end(); ++iter)
cout << *iter << " ";//用迭代器进行输出循环
}
int main(void) {
list<int> listn1, listn2;
//给listn1,listn2初始化
listn1.push_back();
listn1.push_back();
listn1.push_back();
listn1.push_back();
//now listn1:123,0,34,1123
listn2.push_back();
listn2.push_back();
//now listn2:12,100
listn1.sort();
listn2.sort();
//给listn1和listn2排序
//now listn1: 0,34,123,1123 listn2: 12,100
PrintIt(listn1);
cout << endl;
PrintIt(listn2);
listn1.merge(listn2);
//合并两个排序列表后,listn1: 0,12,34,100,123,1123
cout << endl;
PrintIt(listn1);
cin.get();
}

STL--双端队列(deque)和链表(list)的更多相关文章

  1. STL双端队列 deque

    头文件:#include<deque> 构造方法: ①.创建一个没有任何元素的双端队列:deque<type> deq ②.用另一个类型相同双端队列初始化该双端队列:deque ...

  2. C++ STL 双端队列deque详解

    一.解释 Deque(双端队列)是一种具有队列和栈的性质的数据结构.双端队列的元素可以从两端弹出,其限定插入和删除操作在表的两端进行. 二.常用操作: 1.头文件 #include <deque ...

  3. UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque

    Input Each input set consists of a sequence of 52 integers separated by spaces and/or ends of line. ...

  4. 【C++】STL常用容器总结之五:双端队列deque

    6.双端队列deque 所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中间其他的元素.双端队 ...

  5. 双端队列-deque【集vector与list于一身的牺牲内存换功能完善】

    看到双端队列(deque)了,书上是这样说的:除了栈和队列外还有一种限定性数据结构是双端队列:双端队列是限定插入和删除操作在表的两端进行的线性表:尽管双端队列看起来似乎比栈和队列更灵活,但实际上在应用 ...

  6. STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)

    1.FIFO队列   std::queue就是普通意思上的FIFO队列在STL中的模版. 1.1主要的方法有: (1)T front():访问队列的对头元素,并不删除对头元素 (2)T back(): ...

  7. 关于双端队列 deque 模板 && 滑动窗口 (自出)

    嗯... deque 即为双端队列,是c++语言中STL库中提供的一个东西,其功能比队列更强大,可以从队列的头与尾进行操作... 但是它的操作与队列十分相似,详见代码1: 1 #include < ...

  8. Python 实现双端队列 Deque

    操作 Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素 remove_front() 从队头删 ...

  9. 06 基本数据结构 - 双端队列(Deque)

    一.双端队列(Deque) - 概念:deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. - 特性:deque 特殊之处在于添加和删除项是非限制 ...

  10. HDU-6375-度度熊学队列-双端队列deque/list

    度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣. 初始时有 NN 个空的双端队列(编号为 11 到 NN ),你要支持度度熊的 QQ 次操作. ①11 uu ww valval 在编号为 u ...

随机推荐

  1. EHCACHE采用分布需要注意的地方

    分布式EHCACHE系统,有两种同步方式 方式1 :  RMI组播方式 这也是最常用的方式,配置简单,关键一点,各EHCACHE的节点配置都是一样的 原理:这样当缓存改变时,ehcache会向230. ...

  2. 关于Expression表达式树的拼接

    最近在做项目中遇到一个问题,需求是这样的: 我要对已经存在的用户进行检索,可以根据用户的id 或者用户名其中的一部分字符来检索出来,这样就出现了三种情况 只有id,只有用户名中一部字符,或者全部都有. ...

  3. Innodb Read IO 相关参数源代码解析

    前言:最近在阅读Innodb IO相关部分的源代码.在阅读之前一直有个疑问,show global status 中有两个指标innodb_data_reads 和 innodb_data_read. ...

  4. EPANET头文件解读系列8——FUNCS.H

    /***************************************************************************                         ...

  5. C#语法糖之Cookies操作类 asp.net

    用法: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c&quo ...

  6. JS魔法堂:IE5~9的Drag&Drop API

    一.前言     < HTML5魔法堂:全面理解Drag & Drop API>中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一 ...

  7. JS魔法堂:浏览器模式和文档模式怎么玩?

    一.前言 从IE8开始引入了文档兼容模式的概念,作为开发人员的我们可以在开发人员工具中通过“浏览器模式”和“文档模式”(IE11开始改为“浏览器模式”改成更贴切的“用户代理字符串”)品味一番,它的出现 ...

  8. 搜索 --- 数独求解 POJ 2676 Sudoku

    Sudoku Problem's Link:   http://poj.org/problem?id=2676 Mean: 略 analyse: 记录所有空位置,判断当前空位置是否可以填某个数,然后直 ...

  9. JAVA - 大数类详解

    写在前面 对于ACMer来说,java语言最大的优势就是BigInteger,Bigdecimal,String三个类. 这三个类分别是高精度整数,高精度浮点数和字符串,之所以说这个是它的优势是因为j ...

  10. Linq专题之集合初始化器

    集合初始化器用来初始化一个集合,和对象初始化器有点类似,都是用一对{}来初始化. using System; using System.Collections.Generic; using Syste ...