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