C++标准模板库(STL)——(五)

本次介绍的是STL的容器适配器,标准模板库包含了三种容器适配器:stack(栈);queue(队列)和优先级队列(priority_queue)。容器适配器是通过序列式容器实现的,即容器适配器中保存的是容器,容器再存放相关元素。

 

一.Stack容器

  1 .简介:

       stack是堆栈容器,是一种“先进后出”的容器。

stack是简单地装饰deque容器而成为另外的一种容器。

#include<stack>  

 

2. stack的对象的默认构造:

  stack采用模板类实现, stack对象的默认构造形式: stack <T>stkT;  

stack <int> stkInt;           //一个存放intstack容器。

stack <float> stkFloat;     //一个存放floatstack容器。

stack <string> stkString;    //一个存放stringstack容器。

...                  

//尖括号内还可以设置指针类型或自定义类型。

 

3  .  stackpush()和pop()操作:

   stack.push(elem);  //往栈头添加元素

stack.pop();   //从栈头移除第一个元素

 

 

stack<int> stkInt;      

stkInt.push(1);stkInt.push(3);stkInt.pop();   

stkInt.push(5);stkInt.push(7);  

stkInt.push(9);stkInt.pop();   

stkInt.pop();  

此时stkInt存放的元素是1,5  

 

4. stack 的拷贝构造和赋值:

  stack(const stack&stk);           //拷贝构造函数

stack& operator=(const stack &stk);     //重载等号操作符

 

 

         stack<int>stkIntA;

         stkIntA.push(1);

         stkIntA.push(3);

         stkIntA.push(5);

         stkIntA.push(7);

         stkIntA.push(9);

 

 

         stack<int>stkIntB(stkIntA);        //拷贝构造

         stack<int>stkIntC;

         stkIntC= stkIntA;              //赋值

 

5  .  stack的数据存取:

   stack.top();  //返回最后一个压入栈元素

         stack<int>stkIntA;

         stkIntA.push(1);

         stkIntA.push(3);

         stkIntA.push(5);

         stkIntA.push(7);

         stkIntA.push(9);

 

 

         intiTop = stkIntA.top();        //9

         stkIntA.top()= 19;            //19

 

6  . stack 的大小:

  stack.empty();  //判断堆栈是否为空

stack.size();        //返回堆栈的大小

 

 

         stack<int>stkIntA;

         stkIntA.push(1);

         stkIntA.push(3);

         stkIntA.push(5);

         stkIntA.push(7);

         stkIntA.push(9);

 

 

         if(!stkIntA.empty())

         {

             intiSize = stkIntA.size();       //5

         }

 

7  .  参考程序:

本程序是一个计算器;正是通过栈的特性来实现,可带括号的四则运算都可以.

C++标准模板库(STL)——(五)

C++标准模板库(STL)——(五)C++标准模板库(STL)——(五)
C++标准模板库(STL)——(五)

 

8 .运行结果:

C++标准模板库(STL)——(五)

 

 

 

二:queue容器:

1 . 简介:

 queue是队列容器,是一种“先进先出”的容器。

queue是简单地装饰deque容器而成为另外的一种容器。

#include<queue>  

2. queue 对象的默认构造:

  queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;  如:

queue<int> queInt;           //一个存放intqueue容器。

queue<float> queFloat;     //一个存放floatqueue容器。

queue<string> queString;     //一个存放stringqueue容器。

...                  

//尖括号内还可以设置指针类型或自定义类型。

 

 

3  . queue push()和pop()的使用方法:

  queue.push(elem);  //往队尾添加元素

queue.pop();   //从队头移除第一个元素

 

 

queue<int> queInt;

queInt.push(1);queInt.push(3);

queInt.push(5);queInt.push(7);

queInt.push(9);queInt.pop();

queInt.pop();

此时queInt存放的元素是5,7,9

 

 

4 . queue 的数据存取:

  queue.back();  //返回最后一个元素

queue.front();   //返回第一个元素

 

 

         queue<int>queIntA;

         queIntA.push(1);

         queIntA.push(3);

         queIntA.push(5);

         queIntA.push(7);

         queIntA.push(9);

 

 

         intiFront = queIntA.front();        //1

         intiBack = queIntA.back();      //9

 

 

         queIntA.front()= 11;            //11

         queIntA.back()= 19;             //19

 

5  . queue 的大小:

  queue.empty();  //判断队列是否为空

queue.size();       //返回队列的大小

         queue<int>queIntA;    

         queIntA.push(1);     

         queIntA.push(3);         

         queIntA.push(5);      

         queIntA.push(7);      

         queIntA.push(9);      

 

 

         if(!queIntA.empty())

         {

             intiSize = queIntA.size();     //5

         }

 

6 . 参考程序:

C++标准模板库(STL)——(五)
C++标准模板库(STL)——(五)


7 . 运行结果:


 C++标准模板库(STL)——(五)

 

三:priority_queue容器:

 1 .简介:

   最大值优先级队列、最小值优先级队列

优先级队列适配器 STL priority_queue

用来开发一些特殊的应用,请对stl的类库,多做扩展性学习

    priority_queue<int,deque<int>>   pq;

    priority_queue<int,vector<int>>   pq;

    pq.empty()

    pq.size()

    pq.top()

    pq.pop()

    pq.push(item)

#include <iostream>

using namespace std;

#include "queue" 

void main81()

{

    priority_queue<int>p1; //默认是 最大值优先级队列 

    //priority_queue<int,vector<int>, less<int> > p1; //相当于这样写

    priority_queue<int,vector<int>, greater<int>> p2; //最小值优先级队列

 

 

    p1.push(33);

    p1.push(11);

    p1.push(55);

    p1.push(22);

    cout <<"队列大小" <<p1.size() << endl;

    cout <<"队头" << p1.top()<< endl;

 

 

    while (p1.size() > 0)

    {

         cout<< p1.top() << " ";

         p1.pop();

    }

    cout << endl;

 

 

    cout << "测试 最小值优先级队列" << endl;

    p2.push(33);

    p2.push(11);

    p2.push(55);

    p2.push(22);

    while (p2.size() > 0)

    {

         cout<< p2.top() << " ";

         p2.pop();

 

 

    }

}

 

 

参考程序:

C++标准模板库(STL)——(五)

C++标准模板库(STL)——(五)

C++标准模板库(STL)——(五)

运行结果:

C++标准模板库(STL)——(五)