国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++之STL--queue模板類

2019-11-06 07:48:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
queue與stack 模板類很相似,queue 模板類也需要兩個(gè)模板參數(shù),一個(gè)是元素類型,一個(gè)容器類

型,元素類型是必要的,容器類型是可選的,默認(rèn)為deque 類型。可選的容器類型有queue,list,但是不能用vector;

queue的核心接口主要由成員函數(shù)push(),front(),back(),pop()構(gòu)成;

push():會(huì)將一個(gè)元素置入queue中;

front():會(huì)返回queue內(nèi)的第一個(gè)元素(也就是第一個(gè)被置入的元素)

back():會(huì)返回queue中的最后一個(gè)元素(也就是最后被插入的元素)

pop():會(huì)移除queue內(nèi)的第一個(gè)元素(也就是第一個(gè)被置入的元素)注意:(1)front()和back()僅僅只是返回元素,并不對(duì)queue中的元素移除,所以多次執(zhí)行這兩個(gè)成員函數(shù),而不執(zhí)行pop(),返回的結(jié)果一樣;

(2)pop()雖然執(zhí)行移除操作,但是并不返回被移除對(duì)象的值;

(3)如果想返回queue的元素,并移除返回的元素,就要同時(shí)執(zhí)行fornt()和pop();

(4)如果queue內(nèi)沒有元素,那么front(),back(),pop()的執(zhí)行都會(huì)導(dǎo)致未定義的行為,所以在執(zhí)行這三個(gè)操作是,可以通過(guò)size()和empty()判斷容器是否為空;

代碼示例:

[cpp] view plain copy#include<iostream>  #include<queue>  #include<string>    using namespace std;    int main()  {      queue<string> q;        q.push("These ");      q.push("are ");      q.push("more than ");        cout<<"back: "<<q.back()<<endl;//返回queue中最后一個(gè)元素(也就是最后被插入到隊(duì)列內(nèi)的元素)      cout<<"back: "<<q.back()<<endl;        cout<<q.front();//返回queue內(nèi)的第一個(gè)元素(也就是最先被插入到隊(duì)列內(nèi)的元素)      q.pop();//移除queue中的第一個(gè)元素        cout<<q.front();      q.pop();        q.push("four ");      q.push("Words!");      q.pop();        cout<<q.front();      q.pop();        cout<<q.front();      q.pop();        cout<<endl;        cout<<"number of elements in the queue: "<<q.size()<<endl;        system("pause");      return 0;  }  運(yùn)行結(jié)果:

自己重寫queue類,pop()會(huì)返回下一個(gè)元素,如果queue為空,pop(),front(),back()會(huì)拋出異常。

queue.h

[cpp] view plain copy#ifndef QUEUE_H  #define QUEUE_H    #include<deque>  #include<exception>    template<class T>  class Queue  {  PRotected:      std::deque<T> c;  public:      class ReadEmptyQueue:public std::exception      {      public:          virtual const char* what() const throw()          {              return "read empty queue";          }      };      typename std::deque<T>::size_type size() const       {          return c.size();      }      bool empty() const      {          return c.empty();      }      void push(const T& elem)      {          c.push_back(elem);      }            T& back()      {          if(c.empty())          {              throw ReadEmptyQueue();          }          return c.back();      }            T& front()      {          if(c.empty())          {              throw ReadEmptyQueue();          }          return c.front();      }      T pop()      {          if(c.empty())          {              throw ReadEmptyQueue();          }          T elem(c.front());          c.pop_front();          return elem;      }  };    #endif  [cpp] view plain copy#include<iostream>  #include"queue.h"  #include<string>    using namespace std;    int main()  {      try      {          Queue<string> q;            q.push("These ");          q.push("are ");          q.push("more than ");            cout<<"back: "<<q.back()<<endl;//返回queue中最后一個(gè)元素(也就是最后被插入到隊(duì)列內(nèi)的元素)          cout<<"back: "<<q.back()<<endl;//兩次返回結(jié)果一樣            cout<<q.pop();          cout<<q.pop();            q.push("four ");          q.push("words!");          q.pop();            cout<<q.pop();          cout<<q.pop();            cout<<endl;            cout<<"number of elements in the queue: "<<q.size()<<endl;            cout<<q.pop()<<endl;//測(cè)試異常      }      catch(const exception& e)      {          cerr<<"EXCEPTION: "<<e.what()<<endl;      }        system("pause");      return 0;  }  運(yùn)行結(jié)果:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 迁安市| 大安市| 石泉县| 温州市| 思茅市| 蒲江县| 邢台市| 康乐县| 湖南省| 大姚县| 嘉兴市| 田林县| 民乐县| 青冈县| 丰顺县| 铜鼓县| 内丘县| 新河县| 都匀市| 重庆市| 景东| 陇西县| 乳山市| 靖宇县| 龙胜| 临夏市| 沈阳市| 关岭| 车致| 武强县| 巴林左旗| 任丘市| 兴安盟| 交城县| 莒南县| 靖边县| 玛多县| 长海县| 涟水县| 田东县| 仁化县|