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 ...