您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C++自適應(yīng)容器是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
前言
標(biāo)準(zhǔn)模板庫(STL)提供了一些容器(比如stack、queue、priority_queue),使用這些容器來模擬棧和隊列的行為。
這種內(nèi)部使用一種容器但呈現(xiàn)另一種容器的行為特征稱為自適應(yīng)容器。
棧和隊列與數(shù)組或list非常相似,但是對插入、訪問和刪除元素的方式有一定的限制。可將元素插入到什么位置以及可以從什么位置刪除元素決定了容器的行為特征。
棧:棧是先進(jìn)后出系統(tǒng),只能從棧頂插入或者刪除元素。
隊列:隊列是先進(jìn)先出系統(tǒng),元素被插入到隊尾,從隊頭刪除,最先插入的元素最先刪除。可將隊列視為在電影院排隊買票的人,先加入隊列的人先離開。
泛型STL容器std::stack模擬了棧的這種行為。要使用stack,必須包含頭文件:
#include <stack>
STL stack 是一個模板類。允許在頂部插入和刪除元素,而不允許訪問中間的元素。
在STL實現(xiàn)中,std::stack的定義如下:
template<class elementType, class Container=deque>class stack;
參數(shù)elementType是stack存儲的對象類型
第二個模板參數(shù)Container是stack使用的默認(rèn)底層容器實現(xiàn)類。默認(rèn)是使用std::deque來存儲數(shù)據(jù),但可以指定使用vector或list來存儲數(shù)據(jù)。
實例化stack
創(chuàng)建用于存儲double類型的元素的棧:
stack stackDoubles;
創(chuàng)建存儲類(如Tuna)對象的棧:
stack stackTunas;
創(chuàng)建存儲double類型元素,并且使用vector作為底層容器的棧:
stack::<double, vector >stackDoublesInVector;
使用一個stack對象的拷貝來創(chuàng)建另一個stack對象:
stack stackIntsCopy(stackInts);
stack的成員函數(shù)
stack改變了另一種容器(如deque、list或vector)的行為,通過限制元素插入或刪除的方式實現(xiàn)其功能,從而提供嚴(yán)格遵守棧機(jī)制的行為特征。
1.push
stackInts.push(25); //在棧頂插入元素
2.pop
stackInts.pop(); //刪除棧頂?shù)脑?br/> 3.empty
if(stackInts.empty()){DoSomething;} //判斷棧是否為空
4.size
size_t nNum=stackInts.size(); //返回棧中的元素數(shù)
5.top
stackInts.top(); //獲得指向棧頂元素的引用
STL queue是一個模板類。只允許在末尾插入元素以及從開頭刪除元素;queue不允許訪問中間的元素,但可以訪問開頭和末尾的元素。
泛型STL容器std::queue模擬了隊列的這種行為。要使用queue,必須包含頭文件:
#include <queue>
std::queue的定義如下:
template<class elementType, class Container=deque>class queue;
第一個參數(shù)elementType,是queue對象包含的元素的類型。
第二個參數(shù)Container,是用于存儲其數(shù)據(jù)的集合的類型。默認(rèn)情況下為deque,也可設(shè)置為list或vector。
實例化queue
創(chuàng)建存儲類型為int的隊列:
queue qIntegers;
創(chuàng)建存儲元素類型為double,且使用std::list存儲這些元素:
queue <double, list>qDoublesInList;
使用一個queue實例化另一個queue:
queue qCopy(qIntegers);
queue的成員函數(shù)
1.push
qIntegers.push(25); //在隊尾插入一個元素
2.pop
qIntegers.pop(); //將隊首的元素刪除
3.front
qIntegers.front(); //返回指向隊首的引用
4.back
qIntegers.back(); //返回指向隊尾的引用
5.empty
if(qIntegers.empty()){} //檢查隊列是否為空
6.size
size_t nNum=qIntegers.size(); //返回隊列的元素數(shù)
STL priority_queue 是一個模板類,使用它,也必須包含頭文件:
#include <queue>
priority_queue與queue的不同之處在于,包含最大值的元素位于隊首(默認(rèn)情況下),且只能在隊首執(zhí)行操作。
實例化
std::priority_queue類的定義如下:
template<class elementType, class Container=vector, class Compare=less> class priority_queue
第三個參數(shù)Compare指定一個二元謂詞。默認(rèn)使用std::less,從大到小排序,即隊首為最大值。使用greater從小到大排序。
實例化一個整型的優(yōu)先級隊列:
priority_queue pqIntegers;
創(chuàng)建一個元素類型為double,且按從小到大的順序存儲在std::deque中的優(yōu)先級隊列:
priority_queue <int, deque, greater >pqIntegers_Inverse;
使用一個priority_queue來實例化另一個priority_queue:
pqIntegers pqCopy(pqIntegers);
priority_queue的成員函數(shù)
1.push
pqIntegers.push(10); //在優(yōu)先隊列中插入一個元素
2.pop
pqIntegers.pop(); //刪除隊首元素,即最大的元素
3.top
pqIntegers.top(); //返回隊列中隊首元素的引用(即最大的元素)
4.empty
if(pqIntegers.empty()){} //檢查是否為空
5.size
pqIntegers.size(); // 返回優(yōu)先隊列中的元素個數(shù)
“C++自適應(yīng)容器是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。