日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL系列之一 deque双向队列

發布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL系列之一 deque双向队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/morewindows/article/details/6946811

deque雙向隊列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在接口上和vector非常相似,下面列出deque的常用成員函數:

deque的實現比較復雜,內部會維護一個map(注意!不是STL中的map容器)即一小塊連續的空間,該空間中每個元素都是指針,指向另一段(較大的)區域,這個區域稱為緩沖區,緩沖區用來保存deque中的數據。因此deque在隨機訪問和遍歷數據會比vector慢。具體的deque實現可以參考《STL源碼剖析》,當然此書中使用的SGI STL與VS2008所使用的PJ STL的實現方法還是有區別的。下面給出了deque的結構圖:

?

由于篇幅問題,deque的實現細節就不再深入了,下面給出deque的使用范例:

[cpp]view plaincopy
  • //雙向隊列?deque??
  • //by?MoreWindows?http://blog.csdn.net/morewindows??
  • #include?<deque>??
  • #include?<cstdio>??
  • #include?<algorithm>??
  • using?namespace?std;??
  • int?main()??
  • {??
  • ????deque<int>?ideq(20);?//Create?a?deque?ideq?with?20?elements?of?default?value?0??
  • ????deque<int>::iterator?pos;??
  • ????int?i;??
  • ??
  • ????//使用assign()賦值??assign在計算機中就是賦值的意思??
  • ????for?(i?=?0;?i?<?20;?++i)??
  • ????????ideq[i]?=?i;??
  • ??????
  • ????//輸出deque??
  • ????printf("輸出deque中數據:\n");??
  • ????for?(i?=?0;?i?<?20;?++i)??
  • ????????printf("%d?",?ideq[i]);??
  • ????putchar('\n');??
  • ??
  • ????//在頭尾加入新數據??
  • ????printf("\n在頭尾加入新數據...\n");??
  • ????ideq.push_back(100);??
  • ????ideq.push_front(i);??
  • ??
  • ????//輸出deque??
  • ????printf("\n輸出deque中數據:\n");??
  • ????for?(pos?=?ideq.begin();?pos?!=?ideq.end();?pos++)??
  • ????????printf("%d?",?*pos);??
  • ????putchar('\n');??
  • ??
  • ????//查找??
  • ????const?int?FINDNUMBER?=?19;??
  • ????printf("\n查找%d\n",?FINDNUMBER);??
  • ????pos?=?find(ideq.begin(),?ideq.end(),?FINDNUMBER);??
  • ????if?(pos?!=?ideq.end())??
  • ????????printf("find?%d?success\n",?*pos);??
  • ????else??
  • ????????printf("find?failed\n");??
  • ??
  • ????//在頭尾刪除數據??
  • ????printf("\n在頭尾刪除數據...\n");??
  • ????ideq.pop_back();??
  • ????ideq.pop_front();??
  • ??
  • ????//輸出deque??
  • ????printf("\n輸出deque中數據:\n");??
  • ????for?(pos?=?ideq.begin();?pos?!=?ideq.end();?pos++)??
  • ????????printf("%d?",?*pos);??
  • ????putchar('\n');??
  • ????return?0;??
  • }??
  • 運行結果如下:

    另外要注意一點。對于deque和vector來說,盡量少用erase(pos)和erase(beg,end)。因為這在中間刪除數據后會導致后面的數據向前移動,從而使效率低下。

    ? 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的STL系列之一 deque双向队列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。