自己總結一些C 常用的STL

2021-09-26 05:18:33 字數 3595 閱讀 7721

1、堆疊(stack) 先進先出(fifo)

標頭檔案:#include < stack >

定義方式: stack < int > s; //乙個名為s的整形堆疊

操作:s.push(x1); //將x1入棧

s.pop(); //出棧,注意:本操作執行的內容是刪除棧頂元素,並不對它進行訪問

s.top(); //訪問棧頂

s.empty(); //判斷棧是否為空,當棧空時,返回true。

s.size(); //訪問棧中的元素個數

2、佇列(queue) 後進先出(lifo)

標頭檔案:#include < queue >

定義方式: queue < int > q; //乙個名為q的整形佇列

操作:q.push(x2); //將x2入隊,即將x2連線到隊尾

q.pop(); //出隊,注意:本操作執行的內容是刪除隊首元素,並不對它進行訪問

q.front(); //訪問隊首

q.back(); //訪問隊尾

s.empty(); //判斷佇列是否為空,當為空時,返回true。

s.size(); //訪問佇列中的元素個數

優先佇列(priority_queue)入隊時預設大元素在隊首,小元素在隊尾

同樣包含在< queue >中

priority_queue 模板類有三個模板引數,第乙個是元素型別,第二個容器型別,第三個是比較運算元。其中後兩個都可以省略,預設容器為vector,預設運算元為less

定義方式

priority_queue< int > q1;//預設定義

priority_queue, less< int > > q3; // 定義大的先出隊,即預設定義

priority_queue< pair> q2; // 注意在兩個尖括號之間一定要留空格。

priority_queueq3; // 定義小的先出隊

priority_queue 的基本操作與queue 相同。

如果不是整形優先佇列,而是結構體優先佇列的話,可以在結構體的定義中對結構體的元素進行排序,過載大於或者小於符號就行,有點類似於sort()中的cmp;

如圖所示:先排x再排y,注意寫法(來自bilibili)

3、map 對映 (< 鍵值(key),實值(value) >)

map的特性是,所有元素都會根據元素的鍵值自動被排序。map的所有元素都是pair,同時擁有實值(value)和鍵值(key)。pair的第乙個元素會被視為鍵值,第二個元素會被視為實值。map不允許兩個元素擁有相同的鍵值

map從本質上來說是乙個對映關係,即鍵值和實值之間的對映。有點類似於陣列的 a[2]=3 其中2是key(鍵值),3是value(實值)。

標頭檔案:#include< map >

定義方式: map < int , int > mp;//乙個名為mp的map

當然還有一些其他的定義方法:

mapstrmap; //小心時間複雜度**(string比較長的時候)

mapintmap;

mapstrmap; //同樣小心時間複雜度**(string比較長的時候

map< char ,string>charmap;

mapcharmap;

mapintmap;

用法:如圖所示

這裡要注意一下map的遍歷和輸出,其中的first就是對應的鍵值,second就是對應的實值。

4、set 集合

特徵:set中不可能同時存在兩個相同的元素(集合的互異性)

標頭檔案:#include< set >

定義方式:set < int > s; //乙個名為s的整形集合

操作集:

例如:s.insert(1); //給集合中插入乙個元素1

if(s.find(1)!=s.end())//如果在集合中找到了元素1,輸出yes,沒找到輸出no

//當然還有另一種寫法是:if(s.count(1))

//這樣寫是因為如果集合中存在1,那麼必定只有乙個(互異性),即條件為真

//這樣寫的時間複雜度比較低,但是不適合於multiset!!

{cout<

**同樣需要注意的是:set中也是預設排序的(把小的排在前面,即公升序排列),所以set在用結構體資料型別的時候一定要把結構體排好序!!和上面寫的一樣

如下所示:

#include#includeusing namespace std;

int main()

{ set s;

s.insert(3);

s.insert(1);

s.insert(2);

s.insert(5);

s.insert(4);

/*注意一下怎麼輸出集合中的所有元素*/

set::iterator iter=s.begin();

while(iter!=s.end())

{ cout<

multiset ( 多重集合 )

和set最大的區別就是,它可以插入重複的元素,如果刪除的話,相同的也一起刪除了;如果查詢的話,返回該元素的迭代器的位置,若有多個相同元素,則返回第乙個元素的位址;

所以不建議用s.count()來對元素的存在性進行查詢,因為如果有多個相同的元素,它的時間複雜度也是很大的。所以還是建議用find()寫。其他操作和set一樣。

同樣的,multiset也是排序好的

#include#includeusing namespace std;

int main()

{ multiset ms;

ms.insert(1);

ms.insert(1);

ms.insert(1);

ms.insert(3);

ms.insert(6);

ms.insert(2);

ms.insert(0);

set::iterator iter=ms.begin();

while(iter!=ms.end())

{ cout<

5、vector(向量) 動態陣列

標頭檔案:#include< vector >

定義方式:vector < int > v;

常用操作:

未完待續……

自己總結的一些VC常用技巧

ctrl 1 插入對話方塊資源 ctrl 2 插入選單資源 ctrl 3 插入游標資源 ctrl 4 插入圖示資源 ctrl 5 插入位圖資源 ctrl 6 插入工具欄資源 ctrl 7 插入加速健表資源 ctrl 8 開啟字串資源 ctrl 9 開啟版本資源。在debug時 f5 除錯程式 shi...

一些自己總結(5 4 5 10)

對上一周進行一下簡單總結吧,本來平常打的次數就不算多,還有一場作廢了,研究半天不算分,還是有點難受的,不過還是老老實實去補了一下a,b,c題目,還有又回去看了看之前整理的一些東西以及補了前幾次比賽的題。怎麼說呢,就我打的這幾場比賽,對我而言,我感覺a題做出來的問題不大,它大多需要的是數學思維和方法考...

自己常用的一些Shell命令

系統常用命令 passwd hostname 修改密碼 useradd hostname 新增使用者 su 切換到root使用者 ssh hostname ssh連線 cd directory 進入到directory目錄 sudo chown username 給使用者賦相應許可權 ctrl c ...