/*deque: 是一个double-ended queue,
    1)支持随即存取,也就是[]操作符,
    2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 
    1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
    2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
    3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
*/

#include <iostream>
#include <deque>
using namespace std;

void printDeque(deque<int> d)
{
//使用下标
//for (unsigned int i = 0; i < d.size(); i++)
//{
// cout<<"d["<<i<<"] = "<<d[i]<<", ";
//}

//使用迭代器
//deque<int>::iterator iter = d.begin();
//for (;iter != d.end(); iter ++)
//{
// cout<<"d["<<iter-d.begin()<<"] = "<<(*iter)<<", ";
//}

//使用迭代器指针
deque<int>::iterator *pIter = new deque<int>::iterator;
if ( NULL == pIter )
{
   return ;
}
for (*pIter = d.begin(); *pIter != d.end(); (*pIter)++)
{
   cout<<"d["<<*pIter - d.begin() <<"]="<<**pIter<<", ";
}
if (NULL != pIter)
{
   delete pIter;
   pIter = NULL;
}

cout<<endl;
}

void main()
{
//创建deque
deque<int> d1; //创建一个没有任何元素的deque对象
deque<int> d2(10);//创建一个具有10个元素的deque对象,每个元素值为默认
deque<double> d3(10, 5.5); //伊妹一个具有10个元素的deque对象,每个元素的初始值为5.5
deque<double> d4(d3); //通过拷贝一个deque对象的元素值, 创建一个新的deque对象
int iArray[] = {11, 13, 19, 23, 27};
deque<int> d5(iArray, iArray+5);//将迭代器区间[first, last)所指的元素拷贝到一个新创建的deque对象中

//初始化赋值:同vector一样,使用尾部插入函数push_back()
for (int i = 1; i < 6 ; i++)
   d1.push_back(i*10);
//遍历元素: 1-下标方式 2-迭代器方式 反向遍历(略)
cout<<"printDeque(d1) : "<<endl;
printDeque(d1);

//元素插入:尾部插入用push_back(),头部插入用push_front(),其它位置插入用insert(&pos, elem)
cout<<"d1.push_front(100): "<<endl;
d1.push_front(100);
printDeque(d1);
cout<<"d1.insert(d1.begin()+3, 200): "<<endl; //支持随机存取(即[]操作符),所以begin()可以+3
d1.insert(d1.begin()+2,200);

printDeque(d1);

//元素删除 尾部删除用pop_back();头部删除用pop_front(); 
//任意迭代位置或迭代区间上的元素删除用erase(&pos)/erase(&first, &last);删除所有元素用clear();
cout<<"d1.pop_front(): "<<endl;
d1.pop_front();
printDeque(d1);

cout<<"d1.erase(d1.begin()+1): "<<endl;
d1.erase(d1.begin()+1); //删除第2个元素d1[1]
printDeque(d1);

cout<<"d1.erase(d1.begin(), d1.begin() + 2) = "<<endl;
d1.erase(d1.begin(), d1.begin() + 2);
printDeque(d1);

cout<<"d1.clear() :"<<endl;
d1.clear();
printDeque(d1);

//其它常用
cout<<"其它常用用法: "<<endl;
int flag = 0;
while(flag < 2)
{
   if (0 == flag )
   {
    for (int i = 1; i < 6 ; i++) //恢复
     d1.push_back(i*10);
   }
   else
   {
    d1.clear();
    cout<<"after d1.clear() , d1.front(), d1.back() is abnormal! other info.:"<<endl;
   }
   cout<<"d1.empty() = "<<d1.empty()<<endl;
   cout<<"d1.size() = "<<d1.size()<<endl;
   cout<<"d1.max_size() = "<<hex<<d1.max_size()<<endl;
   if (!d1.empty())
   {
    cout<<"d1.front() = "<<d1.front()<<endl;
    cout<<"d1.back() = "<<d1.back()<<endl;
   }
  
   flag++;
  
}

//交换
cout<<"d1.swap(d5)= "<<endl;
d1.swap(d5);
cout<<"d1 = ";
printDeque(d1);
cout<<"d5 = ";
printDeque(d5);
//printDeque(d)

}

转帖自:http://www.cppblog.com/huyutian/articles/107459.html

转载于:https://www.cnblogs.com/g0feng/archive/2012/05/15/2502303.html

STL之Deque的使用方法相关推荐

  1. C++STL的deque容器

    C++STL的deque容器 deque容器 deque容器基本概念 deque构造函数 deque赋值操作 deque大小操作 deque 插入和删除 deque 数据存取 deque 排序 deq ...

  2. C++ STL常用库的使用方法(下)

    文章目录 (一)deque 双端队列容器 1) 创建 deque 对象 2) 插入元素 3) 遍历 4)删除元素 (二) list 双向链表容器 1) 创建 list 对象 2) 元素插入和遍历 3) ...

  3. STL之deque和其他容器

    deque简介 deque是"double-ended queue"的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和 ...

  4. STL之Deque容器

    1.Deque容器 1)deque是"double-ended queue"的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)dequ ...

  5. 一文搞懂 STL 中 deque 与 hashtab 的底层实现

    文章目录 一.模板特化 二.设计容器必须定义的型别 三.deque 四.心心念念的优先队列 五.hashtable的构造 一.模板特化 针对任何模板参数更进一步的条件限制所设计出来的一个特化版本,如: ...

  6. C++ STL常用库的使用方法(一)

    文章目录 (0)C++STL介绍 (0)C++STL组件 (一)Vector容器 1)创建vector 2)尾部元素扩张 3)访问 Vector元素 4)元素的删除 5)元素的排序 6) 向量的大小 ...

  7. STL 之 deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

  8. STL之deque详解

    Deuqe概念 容器deque和vector非常相似,属于序列式容器.都是采用动态数组来管理元素,提供随机存取,并且有着和vector一样的接口.不同的是deque具有首尾两端进行快速插入.删除的能力 ...

  9. C++ STL priority_queue的正确使用方法

    priority_queue相对于queue的不同之处在于:优先队列实现了内部自动排序,可根据自己需要自定义排序规则,可以自己编写函数或者仿函数用于内部优先级的确定. //priority_queue ...

最新文章

  1. 搭建WSS 开发测试环境
  2. english email writing techniques demo
  3. 【Linux系统编程】 文件描述符的复制:dup()和dup2()
  4. 你连简单的枚举类都不知道,还敢说自己会Java???滚出我的公司
  5. CSDN-Markdown-图片设置(大小,居中)
  6. 2020-08-24
  7. 编程语言-初学者常见的几个问题
  8. 微信小程序实现使用百度云 人脸录入人脸识别功能
  9. AI:人工智能的本质与未来
  10. AiLight – A hackable RGBW light bulb
  11. 使用 jsbarcode 生成条形码
  12. FMI飞马网|如何尽早的接触人工智能才不会被抢饭碗,2030年会怎么样?
  13. 广联达登录显示服务器异常求回答,求助【服务器异常】
  14. 《MySQL必知必会》的读后感
  15. 微信小程序(四)会员专区
  16. 导出datatable到excel然后让web客户端下载到本地
  17. Linux学习基础文章1:Linux一句话精彩问答
  18. 【三次过】Lintcode 778. 太平洋和大西洋的水流
  19. 7-3 打印学生选课清单 (25分)
  20. 电影订票网站的设计与开发

热门文章

  1. Mat与IplImage*类型间的转换
  2. MATLAB中的ind2vec和vec2ind函数
  3. 【解决方案】chrome打开新标签页自动打开chrome://newtab并且跳转到谷歌香港
  4. svg path属性
  5. springboot配置
  6. 【luogu P3377 左偏树(可并堆)】 模板
  7. 一个简单的GridView分页
  8. UA MATH567 高维统计II 随机向量9 图的Max-cut问题 0.878近似算法
  9. VC++实现Turbo码
  10. VC++初步实现保存数据为音频WAV文件