百鬼夜行第一章 小馬過河

2021-08-01 15:52:43 字數 3935 閱讀 7944

暫時還沒想好寫什麼,就直接把總結的一些東西從筆記裡面複製過來吧,有錯誤的地方還望指正。

先說下我對stl的理解,stl簡單點說就是對複雜資料結構的包裝,省去了一些造輪子的功夫,有句話說的不錯,不僅有造輪子的能力,也要有不造輪子的覺悟,所以我覺得對待stl,可以抱著邊學習邊使用的方法,同時也可以結合網上的stl原始碼分析,理解其中設計的一些思想,好了,下面就貼出我使用stl的時候總結的一些零零碎碎的東西。

stl模板的用法:

pair

pairp(值,值);

例: pairp(5,6);

標頭檔案 utility

作用:用來儲存兩個值,當函式需要返回兩個值時,就可以用它來就進行儲存

方法:p.first返回第乙個值

p.second返回第二個值

memset

memset(void*s,int ch,size_t n);

例: int f[10][10];   memset(f,0,sizeof(f));

標頭檔案作用:為陣列進行記憶體空間分配,同時將陣列全部初始化為0或-1,bool陣列也可以使用memset

注意:!memset無法將陣列初始化為1,如果將中間那個數值寫為1,那麼將初始化為乙個任意大的數.

fill

fill(first,last,val);  first為容器的首迭代器,last為容器的末迭代器,val為將要替換的值,值的型別為容器元素的型別

標頭檔案例:     int f[5] =;

fill(f,f+5,1);

queue

queueq;

例:queueq;

標頭檔案:

作用:按照先進先出的順序進行資料儲存

方法:q.empty()     q.size()    q.push()     q.pop()     q.front()     q.back()    

注:queue不能儲存多維陣列,但是vector可以

stack

stacks;

例:stacks;

標頭檔案作用:按照先進後出的順序進行資料儲存

方法:s.empty()     s.size()     s.push()     s.pop()     s.top()

prioriey_queue

priority_queuep;

例:priority_queuep;

標頭檔案作用:佇列中的數值按照從大到小的順序排序,

也可以用priority_queue,greater> p;設定乙個

從小到大的佇列(注意,後面兩個尖括號中間要空一格

方法:p.empty()     p.push()     p.pop()     p.top()     p.size()

注意:預設為大頂堆,這個容器的方法和stack的有點像,並且沒有迭代器........說真的,有點廢...可以使用set,map進行代替.

setsets;

multisets;(可重集)

例:sets;

標頭檔案作用:實現了紅黑樹的平衡二叉搜尋樹的資料結構,插入元素時,它會自動調整

二叉樹的排列,把元素放到適當的位置,使得每個子數的根節點值大於左子樹

的值,小於右子樹的值,同時還保證了根節點的的左右子樹高度相等.

方法:元素插入:    insert()   

insert(key_value),將key_value插入set中,返回值是pair>::iterator,bool>

bool標誌著是否插入成功,iterator代表著插入後的位置,如果key_value已經存在set中,

則iterator代表key_value在set中的位置

元素刪除:  erase() 

erase(iterator),刪除定位器iterator指向的值

erase(value),刪除值為value的值

erase(first元素查詢:  find()

find(value),查詢值為value的元素,並返回該元素的迭代器,如果沒有找到,則返回end()

count()

返回第乙個元素的定位器:    begin()

返回最後乙個元素的定位器:  end()

中序遍歷:  利用迭代器 iterator

sets;

set::iterator p;

for(p=s.begin();p!=s.end();p++)

cout<<*p《反向遍歷:  rbegin()   反向的begin()

rend()     反向的end()

再利用反向迭代器  reverse_iterator

sets;

set::reverse_iterator rp;

for(p=s.rbegin();p!=s.rend();p++)

cout<<*p《元素邊界定位:  lower_bound(key_value),返回第乙個大於等於key_value的定位器

:upper_bound(key_value),返回最後乙個大於等於key_value的定位器

輸出元素出現的次數:  由於set的特性,該值實際上只能是1或0         s.count()

如果為multiset,該值就不止1了

當set的元素是結構體時,需要我們自己過載《運算子,該過載要點是不同的兩個結構體,顛倒位置時,他們

的《的結果也需要顛倒,只有這樣才能形成乙個連續且正確的《關係. 例:

struct array

};

vector

vectorv;

標頭檔案插入尾部:push_back()

刪除尾部:pop_back()

返回頭部:front()

返回尾部:back()

返回特定位置的資料:at(idx)      (類似陣列下標)

其實直接使用就可以了....

map標頭檔案:

用法:   map

插入資料:mapm;

m["a"] = 1;

m.insert(map::value_type("b",2));

m.insert(pair("c",3));

m.insert(make_pair("d",4));

查詢資料:iter = m.find("b");     

判斷資料是否存在:   iter= m.find("b");          如果不存在鍵值為b的元素,那麼iter為m.end()

m.count("b");                由於map為一一對應的,這個返回值也只有0和1兩種情況.

修改資料 int j= iter->second;

iter->second = j;

m["a"] = j;

刪除資料:m.erase(iter);

m.erase("c");

迭代資料:for(iter=m.begin();iter!=m.end();iter++){}                 注:經實驗,在迭代過程中無法刪除元素,不懂為什麼....

其它方法:m.size()     返回大小

m.count()  返回特定元素的大小

m.empty() 判斷是否為空

m.clear()    清空所有元素       

注:1.map的排序是根據鍵值進行排序的,並且插入元素不會改變迭代器,只有刪除會使對應的迭代器無效

2.出現了用下標表示的字典元素(未賦值),便會自動初始化該物件(包括鍵值對應的元素

不含迭代器的容器:

stack

priority_queue

queue

set和map的迭代器:

由於set和map是二叉樹,所以其迭代器不能簡單地使用+1進行移動,同時只能使用!=.end(),不能使用<.end()

而vector的迭代器可以使用+1進行移動,同時可以使用<.end()

python第一章筆記 第一章 基礎

參與除法的兩個數中有乙個數為浮點數,結果也為浮點數 如 1.0 2,1 2.0,1.0 2.0 python print 1.0 2 結果 0.5 print 1 2.0 結果 0.5 print 1.0 2.0 結果 0.5 整數 整數,計算結果的小數部分被截除,只保留整數部分 不會四捨五入 如 ...

第一章 緒論

1.16 void print descending int x,int y,int z 按從大到小順序輸出三個數 print descending 1.17 status fib int k,int m,int f 求k階斐波那契序列的第m項的值f gender char schoolname 校...

第一章 概述

1.模擬量輸入,輸出,開關量 閃爍 輸入,輸出及資料通訊 2.模擬量大多為開關量 3.mcu前做為前端採集器,mcu 感測器 4.開發步驟 1 i o分析 2 mcu造型 3 評估系統及相關硬體 4 設計硬體系統 5 硬體系統模組測試 6 軟體系統設計 7 系統測試 8 進一步工作 5.交叉編譯 6...