日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
STL容器之雙端隊(duì)列和表容器類

STLC++的一個(gè)類庫(kù)。STL中的容器有隊(duì)列容器和關(guān)聯(lián)容器,容器適配器(congtainer adapters:stack,queue,priority queue),位集(bit_set),串包(string_package)等等。

川匯網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),川匯網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為川匯上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的川匯做網(wǎng)站的公司定做!

在系列中,我將介紹list,vector,deque等隊(duì)列容器,和set和multisets,map和multimaps等關(guān)聯(lián)容器,一共7種基本容器類。

隊(duì)列容器(順序容器):隊(duì)列容器按照線性排列來(lái)存儲(chǔ)T類型值的集合,隊(duì)列的每個(gè)成員都有自己的特有的位置。順序容器有向量類型、雙端隊(duì)列類型、列表類型三種。

下面介紹雙端隊(duì)列容器類和表容器類。

雙端隊(duì)列(deque容器類):

deque(讀音:deck,意即:double queue,#include)容器類與vector類似,支持隨機(jī)訪問(wèn)和快速插入刪除,它在容器中某一位置上的操作所花費(fèi)的是線性時(shí)間。與vector不同的是,deque還支持從開(kāi)始端插入數(shù)據(jù):push_front()。

此外deque也不支持與vector的capacity()、reserve()類似的操作。

 
 
 
  1. #include 
  2. #include 
  3. using namespace std;
  4. typedef deque INTDEQUE;//有些人很討厭這種定義法,呵呵
  5. //從前向后顯示deque隊(duì)列的全部元素
  6. void put_deque(INTDEQUE deque, char *name)
  7. {
  8. INTDEQUE::iterator pdeque;//仍然使用迭代器輸出
  9. cout << "The contents of " << name << " : ";
  10. for(pdeque = deque.begin(); pdeque != deque.end(); pdeque++)
  11. cout << *pdeque << " ";//注意有 "*"號(hào)哦,沒(méi)有"*"號(hào)的話會(huì)報(bào)錯(cuò)
  12. cout<
  13. }
  14. //測(cè)試deqtor容器的功能
  15. int main()
  16. {
  17. //deq1對(duì)象初始為空
  18. INTDEQUE deq1; 
  19. //deq2對(duì)象最初有10個(gè)值為6的元素 
  20. INTDEQUE deq2(10,6); 
  21. //聲明一個(gè)名為i的雙向迭代器變量
  22. INTDEQUE::iterator i;
  23. //從前向后顯示deq1中的數(shù)據(jù)
  24. put_deque(deq1,"deq1");
  25. //從前向后顯示deq2中的數(shù)據(jù)
  26. put_deque(deq2,"deq2");
  27. //從deq1序列后面添加兩個(gè)元素
  28. deq1.push_back(2);
  29. deq1.push_back(4);
  30. cout<<"deq1.push_back(2) and deq1.push_back(4):"<
  31. put_deque(deq1,"deq1");
  32. //從deq1序列前面添加兩個(gè)元素
  33. deq1.push_front(5);
  34. deq1.push_front(7);
  35. cout<<"deq1.push_front(5) and deq1.push_front(7):"<
  36. put_deque(deq1,"deq1");
  37. //在deq1序列中間插入數(shù)據(jù)
  38. deq1.insert(deq1.begin()+1,3,9);
  39. cout<<"deq1.insert(deq1.begin()+1,3,9):"<
  40. put_deque(deq1,"deq1");
  41. //測(cè)試引用類函數(shù)
  42. cout<<"deq1.at(4)="<
  43. cout<<"deq1[4]="<
  44. deq1.at(1)=10;
  45. deq1[2]=12;
  46. cout<<"deq1.at(1)=10 and deq1[2]=12 :"<
  47. put_deque(deq1,"deq1");
  48. //從deq1序列的前后各移去一個(gè)元素
  49. deq1.pop_front();
  50. deq1.pop_back();
  51. cout<<"deq1.pop_front() and deq1.pop_back():"<
  52. put_deque(deq1,"deq1");
  53. //清除deq1中的第2個(gè)元素
  54. deq1.erase(deq1.begin()+1);
  55. cout<<"deq1.erase(deq1.begin()+1):"<
  56. put_deque(deq1,"deq1");
  57. //對(duì)deq2賦值并顯示
  58. deq2.assign(8,1);
  59. cout<<"deq2.assign(8,1):"<
  60. put_deque(deq2,"deq2");
  61. }

上面我們演示了deque如何進(jìn)行插入刪除等操作,像erase(),assign()是大多數(shù)容器都有的操作。關(guān)于deque的其他操作請(qǐng)參閱其書(shū)籍。

表(List容器類)

List(#include)又叫鏈表,是一種雙線性列表,只能順序訪問(wèn)(從前向后或者從后向前),圖2是list的數(shù)據(jù)組織形式。與前面兩種容器類有一個(gè)明顯的區(qū)別就是:它不支持隨機(jī)訪問(wèn)。要訪問(wèn)表中某個(gè)下標(biāo)處的項(xiàng)需要從表頭或表尾處(接近該下標(biāo)的一端)開(kāi)始循環(huán)。而且缺少下標(biāo)預(yù)算符:operator[]。

同時(shí),list仍然包涵了erase(),begin(),end(),insert(),push_back(),push_front()這些基本函數(shù),下面我們來(lái)演示一下list的其他函數(shù)功能。

  • merge():合并兩個(gè)排序列表;
  • splice():拼接兩個(gè)列表;
  • sort():列表的排序
 
 
 
  1. #include 
  2. #include 
  3. #include 
  4. using namespace std;
  5. void PrintIt(list n)
  6. {
  7. for(list::iterator iter=n.begin(); iter!=n.end(); ++iter)
  8. cout<<*iter<<" ";//用迭代器進(jìn)行輸出循環(huán) 
  9. }
  10. int main()
  11. {
  12. list listn1,listn2; //給listn1,listn2初始化 
  13. listn1.push_back(123);
  14. listn1.push_back(0);
  15. listn1.push_back(34);
  16. listn1.push_back(1123); //now listn1:123,0,34,1123 
  17. listn2.push_back(100);
  18. listn2.push_back(12); //now listn2:12,100
  19. listn1.sort();
  20. listn2.sort(); //給listn1和listn2排序
  21. //now listn1:0,34,123,1123 listn2:12,100 
  22. PrintIt(listn1);
  23. cout<
  24. PrintIt(listn2);
  25. listn1.merge(listn2); //合并兩個(gè)排序列表后,listn1:0,12,34,100,123,1123 
  26. cout<
  27. PrintIt(listn1);
  28. }

上面并沒(méi)有演示splice()函數(shù)的用法,這是一個(gè)拗口的函數(shù)。用起來(lái)有點(diǎn)麻煩。圖3所示是splice函數(shù)的功能。將一個(gè)列表插入到另一個(gè)列表當(dāng)中。list容器類定義了splice()函數(shù)的3個(gè)版本:

 
 
 
  1. splice(position,list_value);
  2. splice(position,list_value,ptr);
  3. splice(position,list_value,first,last);

ist_value是一個(gè)已存在的列表,它將被插入到源列表中,position是一個(gè)迭代參數(shù),他當(dāng)前指向的是要進(jìn)行拼接的列表中的特定位置。

listn1:123,0,34,1123 listn2:12,100

執(zhí)行l(wèi)istn1.splice(find(listn1.begin(),listn1.end(),0),listn2);之后,listn1將變?yōu)椋?23,12,100,34,1123。即把listn2插入到listn1的0這個(gè)元素之前。其中,find()函數(shù)找到0這個(gè)元素在listn1中的位置。值得注意的是,在執(zhí)行splice之后,list_value將不復(fù)存在了。這個(gè)例子中是listn2將不再存在。

第二個(gè)版本當(dāng)中的ptr是一個(gè)迭代器參數(shù),執(zhí)行的結(jié)果是把ptr所指向的值直接插入到position當(dāng)前指向的位置之前.這將只向源列表中插入一個(gè)元素。

第三個(gè)版本的first和last也是迭代器參數(shù),并不等于list_value.begin(),list_value.end()。First指的是要插入的列的第一個(gè)元素,last指的是要插入的列的最后一個(gè)元素。

如果listn1:123,0,34,1123 listn2:12,43,87,100 執(zhí)行完以下函數(shù)之后

listn1.splice(find(listn1.begin(),listn1.end(),0),++listn2.begin(),--listn2.end());

listn1:123,43,87,0,34,1123 listn2:12,100

以上,我們學(xué)習(xí)了deque,list兩種基本順序容器,其他的順序容器還有:slist,bit_vector等等。請(qǐng)繼續(xù)下一篇>>


網(wǎng)站標(biāo)題:STL容器之雙端隊(duì)列和表容器類
鏈接分享:http://m.5511xx.com/article/djpipcj.html