`

STL的Deque介绍

 
阅读更多

Deque是双端队列,在画动态图表的时候使用起来比较方便。因为当数据填满图表后,需要从队列的后方插入一个元素,然后再从队列的前方删除一个元素。使用Deque可以很方便的做到。使用push(pop)-back(front)就ok了

下面摘录了一个Deque的使用教程

 

/*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)


}

 

 

分享到:
评论

相关推荐

    STL的容器deque的使用

    **STL中的deque容器详解** `deque`(双端队列)是C++标准模板库(STL)中的一种重要容器,它提供了类似数组的功能,同时支持在两端进行高效插入和删除操作。与vector相比,deque在两端操作时通常具有更好的性能,...

    stl-deque.h (C++STL deque的源码)

    stl30版本中容器deque的源码

    SGI STL deque相关代码

    在STL中,`deque`(双端队列)是一种重要的容器,它允许在两端进行快速的插入和删除操作。本篇文章将深入探讨`deque`的实现原理、特性以及相关的编程实践。 `deque`,全称Double Ended Queue,其设计灵感来源于线性...

    深入研究 C++中的 STL Deque 容器

    这篇深入研究C++中的STL `deque`容器的文章旨在探讨在什么情况下`deque`比`vector`更合适,并分析两者在内存管理和性能上的差异。 首先,`deque`和`vector`都允许动态存储和访问元素。然而,它们在内存分配上有显著...

    凸包melkman算法 cpp STL deque

    poj1113 melkman算法求凸包, 使用STL

    deque(STL)

    STL中的deque模板包括迭代器等接口

    deque.h (包含stl-deque.h的头文件)

    stl30版本中容器deque所引用的头文件,但deque具体实现在std_deque.h

    C++实现STL容器之deque

    C++实现STL容器之deque

    STL 入门知识介绍

    1. 容器(Containers):这些是存储数据的对象,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(关联数组)等。每个容器都有自己的特性,如访问速度、插入和删除操作的效率等。 2....

    关于C++ STL(标准模板库)的资料

    Introduction to STL.doc STL vector 容器介绍.doc Visual+C调试功能.doc 三十分钟掌握STL.doc 深入研究 STL Deque 容器.doc 深入研究 STL Deque 容器.pdf

    关于STL基础详细介绍

    - **deque**:双端队列,类似于可扩展的数组,支持在两端快速插入和删除元素。 - **set**:基于红黑树实现的无序唯一元素集合,插入和查找操作通常具有O(log n)的时间复杂度。 - **multiset**:与set类似,但允许...

    stl的介绍 STL算法作为模板函数提供

    ### STL的介绍与应用 #### 一、STL概述 STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分之一,为程序员提供了高效的数据结构和算法支持。与传统的面向对象编程(OOP)不同,STL更多地依赖...

    Center of STL Study 标准模板库(STL)介绍

    例如,`stack` 和 `queue` 是对 `deque` 的适配,使它们符合栈和队列的行为。`priority_queue` 是一个优先队列适配器,基于堆实现。 总结,STL通过其强大的容器、迭代器、算法和函数对象,为C++程序员提供了丰富的...

    【STL源码剖析】deque 的使用

    【STL源码剖析】deque 的使用

    STL入门 STL入门 STL入门 STL入门 STL入门 STL入门

    例如,你可以使用STL的sort算法对不同类型的容器进行排序,无论是vector、list还是deque,只要它们的迭代器支持必要的操作,sort都能工作。这是因为sort算法并不关心容器的具体实现,它只依赖于迭代器提供的访问和...

    C++ STL案例(vector+deque容器)

    案例-评委打分 ...遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中 sort算法对deque容器中分数排序,去除最高和最低分 deque容器遍历一遍,累加总分 获取平均分

    stl介绍及使用方法

    例如,可以使用栈(stack)或队列(queue)适配器将列表或deque的行为转变为这些特定的数据结构。 STL的采用使得程序员能够更专注于解决问题,而不是关注底层的实现细节。随着1994年7月14日STL被采纳为ANSI/ISO C++...

    C++ 标准模板库(STL) 介绍

    C++ 标准模板库(STL) 介绍 C++ 标准库是 C++ 语言的基础组件之一,它提供了大量的函数和类,以便程序员更方便地进行编程。C++ 标准库中最重要的组件之一是 STL(Standard Template Library),它提供了大量的容器、...

    C++ STL程序员面试题

    以下将详细介绍这四个文档可能涉及的STL相关知识点。 1. **STL说明.doc** 这份文档可能涵盖了STL的基本概念,包括其设计理念和组成部分。例如: - 容器:存储数据的对象,如vector(动态数组)、list(双向链表)...

    STL的一些介绍

    1. 容器:STL提供了多种容器类,如vector、list、deque、set、map等。这些容器用于存储和管理数据。例如: - `vector`:动态数组,支持随机访问,增删元素在尾部较快。 - `list`:双向链表,插入和删除元素效率高...

Global site tag (gtag.js) - Google Analytics