暫時還沒想好寫什麼,就直接把總結的一些東西從筆記裡面複製過來吧,有錯誤的地方還望指正。
先說下我對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...