`
deepfuture
  • 浏览: 4410328 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80117
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70284
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103555
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286484
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15037
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67759
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32276
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46066
社区版块
存档分类
最新评论

c++中stack,deque,queue

 
阅读更多

STL包含一些为满足特殊需求而设计的容器,
他们提供简单而清晰的接口:
    1.Stack
    2.Queue
    3.Priority Queue
    4.bitset

本文介绍Stack.
Stack(也称LIFO,即后进先出)的声明如下:
template<typename _Tp, typename _Sequence = deque<_Tp> >
class stack;

第一个template代表元素类型
第二个template代表stack内部存放元素所用的实际容器,缺省用deque。
之所以选择deque而不是vector是因为:
1.deque移除元素时候会释放内存,
2.deque不必在重新分配内存是复制全部元素

 

实际上,stack只是很单纯的把各项操作转换为内部容器的对应调用。这从其实现代码也可以看出,下面是stack的源代码,这里去掉了value_type等声明和构造析构函数等,主要列举了几个常用的接口:

protected:
      _Sequence c;   ///内部容器
public:

      bool empty() const { return c.empty(); }

      size_type size() const { return c.size(); }

      reference top()   ///注意top返回的是reference

     {
        __glibcxx_requires_nonempty();
        return c.back();
      }

      const_reference top() const
      {
        __glibcxx_requires_nonempty();
        return c.back();
      }
      void push(const value_type& __x)
      { c.push_back(__x); }

       void pop()
      {
        __glibcxx_requires_nonempty();
        c.pop_back();
      }

我们可以使用任何序列式容器来支持stack,
只要他们支持back(),push_back(),pop_back()等动作就行。
如以vector支持stack可定义:  stack<int,vector<int> > intStack;

    核心接口(源代码中可以看出其实现):
    1.push()
    2.pop()
    3.top()
    4.size()
    5.empty()

   6.comparision(const stack& s1,const stack& s2) ///两个同型stack的比较,

      comparision可以是:==,!=,<,>,<=,>=

      (如果两个stack的size()相等并且对应元素也相等则它们相等;比较基于字典序,参考lexicographical_compare())

 

下面是stack的一个简单的应用:

void testStack()
{
    stack<int> intStack;
    for(int i=1;i<10;++i)
        intStack.push(i);
    cout<<"Size = "<<intStack.size()<<endl;
    string empty = intStack.empty()?"True":"False";
    cout<<"Empty = "<<empty<<endl;
    cout<<"Stack top() = "<<intStack.top()<<endl;
    intStack.top() = 100;   ///利用top()返回reference修改top值
    cout<<"Stack All Elements: ";
    while(!intStack.empty())
    {
        cout<<intStack.top()<<" ";
        intStack.pop();
    }
    cout<<endl;
}

 

c++中stack,deque,queue对比

 

 

stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素

deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法

queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素

代码如下:

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main(){
stack<int>s;
for(int i=1;i<=10;++i){
s.push(i);
}
for(int j=0;j<10;++j){
cout<<s.top()<<" ";
s.pop();
}
cout<<endl;
system("pause");
return 0;
}

 


#include<iostream>
#include<string>
#include<deque>
using namespace std;
int main(){
deque<int>q;
for(int i=0;i<10;++i){
q.push_back(i);
}
cout<<q.front()<<endl;
for(deque<int>::iterator iter=q.begin();iter!=q.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
cout<<q.back()<<endl;
system("pause");
return 0;
}


#include<iostream>
#include<queue>
#include<string>
using namespace std;
int main(){
queue<int>q;
for(int i=0;i<10;++i){
q.push(i);
}
for(int i=0;i<10;++i){
cout<<q.front()<<" ";
q.pop();
}
cout<<endl;
system("pause");
return 0;
}

 

分享到:
评论

相关推荐

    【c++】深入剖析与动手实践:C++中Stack与Queue的艺术.txt

    ### C++中Stack与Queue的艺术 #### 数据结构实现 在深入了解C++中栈(Stack)与队列(Queue)之前,我们首先需要明确这两种数据结构的基本概念及其在C++中的实现方式。 - **栈(Stack)**: 栈是一种后进先出...

    c++stack_和_queue用法

    ### C++ STL中Stack和Queue的使用详解 #### 一、引言 在C++标准模板库(STL)中,提供了许多高效的容器类,其中包括`stack`和`queue`。这两种容器非常适合处理需要先进后出(FILO, First In Last Out)或先进先出(FIFO,...

    Stack_Queue_Stack_源码.zip

    本资料“Stack_Queue_Stack_源码.zip”可能包含了一些关于栈和队列的实现源代码,可能是用C++、Java或Python等编程语言编写的。下面我们将深入探讨这两种数据结构以及它们的应用。 1. 栈(Stack) 栈是一种后进先出...

    Stack_Queue_Stack_

    在实际编程中,我们可以通过数组、链表或者特定的数据结构(如C++的`std::stack`和`std::queue`,Python的`collections.deque`)来实现栈和队列。理解并熟练掌握这两种数据结构,对于提升编程能力大有裨益。

    C++ STL容器stack和queue详解

    C++ STL(Standard Template Library,标准模板库)提供了两种特殊的线性容器:stack(栈)和queue(队列),它们都是基于顺序容器(如vector或deque)实现的抽象数据类型,用于实现特定的数据操作逻辑。 **1. ...

    数据结构算法集---C++语言实现.rar_queue stack_堆栈 栈_数据结构 队列_链表_队列

    在C++中,可以使用标准模板库(STL)中的`stack`容器来实现堆栈。堆栈的主要操作包括压栈(push)、弹栈(pop)、查看栈顶元素(top)以及检查栈是否为空(empty)。堆栈在递归、表达式求值、回溯算法等方面有着广泛...

    stack类模板源代码

    在C++编程语言中,`stack`是一种标准模板库(STL)容器,它实现了后进先出(LIFO)的数据结构,常被用作堆栈。本文将深入解析`stack`类模板的源代码,帮助你理解和运用这个重要的数据结构。 首先,`stack`并不是一个...

    C++STL详解PPT

    顺序容器包括 vector、deque、list 等,关联容器包括 set、multiset、map、multimap 等,容器适配器包括 stack、queue、priority_queue 等。 顺序容器是 STL 中的一种基本容器,用于存放各种类型的数据。顺序容器...

    map queue stack

    在C++中,`std::stack`是一个模板类,通常基于`std::deque`或`std::vector`实现。Python中没有内置的`stack`,但可以使用列表(`list`)模拟栈的行为。栈常用于表达式求值、函数调用、深度优先搜索(DFS)等场景。 ...

    C++中STL使用总结

    来获取queue中的元素数量,使用q.empty();判断queue是否为空。 5. 元素入队:使用q.push(value);将元素添加到queue的尾部。 6. 元素出队:使用q.pop();可以从queue中移除头部元素。 四、priority_queue优先队列...

    C++标准模板库源代码

    C++ STL中的queue是一个接口,实际的实现通常依赖于底层的deque或list。 7. **set**:集合是一个不包含重复元素的容器,元素自动排序。set的实现通常基于红黑树,确保插入、查找和删除操作的时间复杂度为O(log n)。...

    c++ STL思维导图(自己总结)

    本文将总结C++ STL中的主要容器和算法,包括vector、deque、list、set、map、queue、stack和string等。 Vector容器 Vector容器是C++ STL中最常用的容器之一,用于存储同类型的元素。Vector容器提供了多种构造函数...

    栈和队列C++源代码

    在`ch03_Stack_Queue`这个压缩包中,包含了栈和队列的C++源代码实现。可能包含以下部分: 1. **栈的实现**: 可能使用`vector`作为基础,实现`push`、`pop`、`peek`和`isEmpty`方法。 2. **队列的实现**: 可能使用两...

    《数据结构》的全部代码实现(C++语言)

    3. **栈**:栈是一种后进先出(LIFO)的数据结构,C++标准库中的`stack`容器可以方便地实现栈的功能,如`push`、`pop`和`top`等操作。 4. **队列**:队列是一种先进先出(FIFO)的数据结构,C++中的`queue`容器提供...

    C++API中文使用文档

    - **适配器**:如stack、queue、priority_queue,将容器转换为特定数据结构。 - **智能指针**:如std::unique_ptr、std::shared_ptr和std::weak_ptr,用于安全地管理内存。 这份文档是C++开发者的重要参考资料,...

    C++ 顺序容器基础知识总结

    stack和queue虽然是容器,但它们是基于deque的容器适配器,而priority_queue则是基于heap实现的。array和forward_list是在C++11中引入的新容器类型。 std::array是固定大小的数组,底层实现为固定数组。定义时必须...

    侯捷STL课件_C++_候捷课件stl_c++侯捷课件_

    例如,stack和queue是基于deque的适配器,priority_queue是基于heap的适配器。侯捷会详细解析这些适配器的工作原理和使用方法。 6. **内存管理(Memory Management)**:STL容器通常使用智能指针(如auto_ptr、...

    C++函数库帮助.chm

    5. **容器**:STL中的容器如vector、list、deque、stack、queue和priority_queue等,它们提供了动态存储和管理数据的方式。每个容器都有其特定的使用场景和性能特点,例如,vector适合随机访问,而list适合频繁插入...

    C++ 标准库 中文 高清 (2020最新带书签)

    C++标准库还包括了基本类型转换(如`&lt;charconv&gt;`)、容器(如`&lt;deque&gt;`、`&lt;forward_list&gt;`、`&lt;map&gt;`、`&lt;set&gt;`、`&lt;stack&gt;`、`&lt;queue&gt;`、`&lt;unordered_map&gt;`、`&lt;unordered_set&gt;`等)、迭代器、智能指针(如`&lt;memory&gt;`中...

Global site tag (gtag.js) - Google Analytics