1. 程式人生 > >C++容器介面卡的理解與使用

C++容器介面卡的理解與使用

1.對容器介面卡的理解

C++提供了三種容器介面卡(container adapter):stack,queue和priority_queue。stack和queue基於deque實現,priority_queue基於vector實現。

舉個簡單的例子,我們手機充電的時候需要電源介面卡來把220v的交流電轉換成較低電壓的直流電以供手機充電使用,220v的電壓太高了,我們不需要那麼高的電壓,而且高電壓還有可能產生其他很多不良後果。

基礎的容器型別就相當於那220v的電壓,經過介面卡轉換後才成為了我們需要的低電壓(stack,queue,priority_queue)。你完全可以在deque上按照stack的方式工作,但是deque太強大了,它提供了遠超過stack操作(empty, size, pop, top, push)所需的各種介面,你可以小心翼翼地在deque上只使用那幾種操作來模擬一個棧,但是你很有可能一失誤來個push_front()之類的操作,你小心翼翼模擬的棧就毀了。所以,我們需要介面卡來做一下轉換,只保留基礎型別提供的介面中的一部分,保留的這部分操作對於你所需要的資料結構來說已經足夠了。

2.三種容器介面卡提供的操作

1.stack

stack<int> s;
stack< int, vector<int> > stk;  //覆蓋基礎容器型別,使用vector實現stk
s.empty();  //判斷stack是否為空,為空返回true,否則返回false
s.size();   //返回stack中元素的個數
s.pop();    //刪除棧頂元素,但不返回其值
s.top();    //返回棧頂元素的值,但不刪除此元素
s.push(item);   //在棧頂壓入新元素item

2.queue & priority_queue

queue<int> q; //priority_queue<int> q;
q.empty();  //判斷佇列是否為空
q.size();   //返回佇列長度
q.push(item);   //對於queue,在隊尾壓入一個新元素
               //對於priority_queue,在基於優先順序的適當位置插入新元素

//queue only:
q.front();  //返回隊首元素的值,但不刪除該元素
q.back();   //返回隊尾元素的值,但不刪除該元素

//priority_queue only:
q.top();    //返回具有最高優先順序的元素值,但不刪除該元素