c++ stl使用與說明

1. for_each(起始迭代器,迭代器末尾+1,函數名);  //對範圍內的元素進行操作,比如print
2.distance(first, last)函數用來計算兩個迭代器的距離
3.setprecision()函數實現格式控制
  使用:#include <iomanip>
cout << "a=" << setprecision(2) << a <<endl;//保留兩位小數

//a=0.20000001
cout.setf(ios::fixed);//沒有fixed的話會輸出0.2
//cout.unsetf(ios::fixed);  //關閉補0
cout << "a=" <<fixed<< setprecision(2) << a <<endl; //輸出a=0.20

4.double temp = atof(&str_l[i]);//儘可能地將字符串轉小數
5.list操作
push_front、push_back、erase、pop_front、pop_back
clear、remove//erase是以迭代器爲基本單位,清除元素,改變size的值;remove是以value相等爲標準,也改變size的值。
unique//移除數值相同的【連續】元素,只保留一個
splice(迭代器pos,list2) //將list2接合於pos所指位置之前,list2必須不同於*this
list1.splice(迭代器pos,list&,iter)//將i所指元素接合於pos之前,兩個list可指向同一個
list1.splice(迭代器pos,first,last)//將first last之間的元素接合於pos之前,pos不能位於first與last之間
merge(l2)將l2所指內容合併到*this上,兩個lists的內容都必須先經過遞增排序
reverse、sort//list不能使用stl算法中的sort()[因爲stl的sort只接受randomAccessIterator隨機訪問迭代器] 只能使用自己的sort

6.deque
deque與vector的差異:
    1 deque可以在常數時間內對頭端進行元素插入或移除
    2 deque沒有容量概念,由動態地以分段連續空間組合而成
對deque排序時爲提高效率應將deque複製到vector,排序後複製回deque
vector空間增長過程
    1尋找更大空間
    2將原數據複製過去
    3釋放原空間
deque操作
pop_back pop_front clear erase insert

7.容器底部實現說明
heap內含一個vector
priority_queue內含一個heap,
stack(container adapter)和queue(container adapter)都內含一個deque(封閉deque的頭部操作實現stack,以list也可以,封閉deque底端的出口和前端的入口形成queue ,stack和queue沒有迭代器)
set/map/multiset/multimap都內含一個RB-tree紅黑樹
hash_x都內含一個hash table

8.heap以算法形式供應
make_heap(first,last)
push_heap(first,last)
pop_heap(first,heap)
sort_heap(first,heap)

9.priority_queue(container adapter)
默認通過max-heap完成.heap是以vector表現的complete binary tree
priority_queue帶有權值概念,無迭代器

10.slist單向鏈表(不在標準範圍內)
#include <slist> //vs2013不支持

11.set
set查找時既可以使用STL算法find()也可以使用set容器的find()方法,因爲前者是遍歷,Set本身有序所以後者更有效率
set的元素可以插入、刪除,但是不可更改。不能通過迭代器來改變set元素,因爲破壞set的有序性會導致非預期的行爲
count() find merge contains是否包含某元素 equal_range返回匹配特定鍵的元素範圍 lower_bound返回首個不小於給定鍵的元素的迭代器 upper_bound返回指向首個大於給定鍵的元素的迭代器 key_comp返回用於比較鍵的函數 value_comp範湖用於在value_type類型的對象中的比較鍵的函數
12.map
map的所有元素都是pair類型,可以插入刪除但是不能更改map的鍵值,願意是會破壞鍵值的有序性,但可以更改實值

13.multiset/multimap
set和map不允許鍵值重複,multiset/multimap允許鍵值重複

14.hash table
解決hash碰撞3方法
1線性探測,若碰撞,則找下一個可用的空間使用。會導致主集團現象,插入操作不斷解決碰撞問題最後才找到可用位置,但同時又增加了主集團的已用面積。
元素的刪除必須用惰性刪除:只標記刪除序號,實際刪除操作待表格重新整理時再進行——因爲hash table中的每一個元素不僅描述它自己,也關係到其他元素的排列。
2二次探測消除主集團問題,但可能造成次集團問題
3開鏈,每個表格元素維護一個lsit

15.stl算法
accumulate  元素累計(加減)
adjacent_difference 相鄰元素的差額  adjacent鄰
adjacent_find 查找相鄰而重複(或符合某條件)的元素
binary_search 二分查找
Copy  Copy_backward逆向複製 Copy_n複製n個元素
count/count_if在特定條件下計數
equal  equal_range 在有序區間中尋找某值
fill fill_n
find循環查找 find_if循環查找符合條件者 find_end 某個子序列最後一次出現find_first_if
for_each對區間內每個元素進行特定操作
generate以特定操作的運算結果填充區間 generate_n
includes是否涵蓋於某序列之中
inner_product內積
inplace_merge合併並就地替換
lexicographical_compare以字典順序進行比較
low_bound將指定元素插入區間之內而不影響區間之原本順序的最低位置
max最大值  max_element最大值所在位置
merge
min min_element
mismatch找出不匹配點
next_permutation獲得下一個排列組合
nth_element重新安排序列中的第n個元素的左右兩端
partial_sort局部排序  partial_sort_copy局部排序並複製到它處
partial_sum局部求和
partition分割
pre_permutation獲得前一個排列組合
power求冪
random_shuffle隨機重排元素
remove刪除某類元素 remove_copy remove_copy_if
replace替換某類元素 replace_if replace_copy_if
reverse reverse_copy
rotate旋轉 rotata_copy
search查找某個子序列 search_n
set_difference差集
set_intersection交集
set_symmertic_difference對稱差集
set_union並集
sort
stable_partition分割並保存元素的相對次序
stable_sort排序並保持等值元素的祥對此徐
swap
swap_ranges交換(指定區間)
transform以兩個序列爲基礎,交互作用產生第三個序列
unique將重複的元素摺疊偏縮,使之唯一
unique_copy
upper_bound將指定元素插入區間之內而不影響區間之原本順序的最高位置
make_heap
pop_heap
push_heap
sort_heap

16.當註釋掉大塊代碼時,使用"#if 0"比使用"/**/"要好,因爲用"/**/"做大段的註釋要防止被註釋掉的代碼中有嵌套的"/**/",這會導致註釋掉的代碼區域不是你想要的範圍,其間的代碼塊不會被編譯。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章