C 標準模板庫(STL 學習記錄 Part2

2021-08-15 19:52:31 字數 1622 閱讀 4963

queuename;

佇列本身就是一種先進先出的限制性資料結構,因此只能通過 q.front() 和 q.back() 來訪問隊首 隊尾元素,時間複雜度為o(1)

(1)push(x)將x進行入隊

(2)front() 和 back()分別獲得隊首 隊尾元素

(3)pop() 令隊首出隊

(4)empty() 檢測queue是否為空,返回true為空,返回false則非空

(5)size()返回queue內的元素的個數

以上的時間複雜度均為o(1)

當需要實現廣度優先搜尋時,可以不用自己手動實現乙個佇列,而是用queue作為代替

另外,使用front和pop函式前,必須用empty函式判斷佇列是否為空,否則可能因為隊空而出現錯誤

stl中還有雙端佇列(deque)和優先佇列(priority_queue)

priority_queue又稱為優先佇列,其底層是用堆來進行實現的,在優先佇列中,隊首元素一定是當前佇列中優先順序最高的那個

priority_queue name;

和佇列不一樣的是,優先佇列沒有front函式和back函式,而只能通過top()函式來訪問隊首元素(堆頂元素)

push()        top()        pop()        empty()        size()

如何定義優先佇列內元素的優先順序是運用好優先佇列的關鍵

(1)基本資料型別的優先順序設定(包括int,double,char型別等)

一般是數字大的優先順序越高,如果char型,則是字典序最大的

priority_queueq;

priority_queue< int , vector, less> q;

//這兩種定義是等價的

後面多出的兩個引數,vector是來承載底層資料結構堆(heap)的容器,less則是對第乙個引數的比較型別,表示數字大的優先順序越大,而greater表示數字小的優先順序高    

priority_queue,greater> q;
(2)結構體的優先順序設定

struct fruit

}; priority_queue,cmp> q;

此處把great<>換成了cmp

最後指出,如果結構體內的資料較為龐大(例如出現了字串或者陣列),建議使用引用來提高效率,此時比較類的引數中需要加上const 和 &

struct fruit

}f1,f2,f3;

struct cmp

};

可以解決一些貪心問題,也可以對dijkstra演算法進行優化(因為優先佇列的本質是堆)

另外,使用top函式前,必須用empty函式判空,否則可能導致隊空而出錯

stack ,棧,是stl中實現的乙個後進先出的容器

stackname;

由於棧本身就是一種後進先出的資料結構,在stl的stack中只能通過top()函式來訪問棧頂元素

push()        top()        pop()        empty()        size()    

stack用來模擬實現一些遞迴,防止程式對棧記憶體的限制而導致程式執行錯誤。

c 標準模板庫STL學習

初始化vector物件的方法 vector v1 vector儲存型別為t的物件。預設建構函式v1為空 vector v2 v1 v2是v1的乙個副本 vector v3 n,i v3包含n個值為i的元素 vector v4 n v4包含有值初始化元素的n個副本 vector常用函式 empty 判...

學習標準模板庫STL

標準模板庫 stl,即standard template library 是乙個c 軟體庫。stl常見頭件包括algorithm,functional iterator vector list deque queue stack等。在學習過程中與其他常見庫對比,如mfc,wxwidgets,itk,...

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...