![](http://static.javashuo.com/static/loading.gif)
前言
上一章節主要是詳細介紹了C++STL迭代器,而且簡單模擬了一下list中的容器,不清楚的能夠回顧一下哦。本章節主要針對於C++算法作個詳細介紹。STL中算法大體分爲四類:算法
非可變序列算法:不修改容器內容的算法。 編程
可變序列算法:修改容器內容的算法。 微信
排序算法:排序合併搜索等內容的算法 app
數值算法:對容器內容進行數值計算。 dom
C++STL中70+的算法,如下對稍微經常使用的算法進行細緻分類並標明功能。編輯器
![](http://static.javashuo.com/static/loading.gif)
查找算法
查找算法就是判斷容器中是否包含某個值,主要的查找算法主要是有如下13個:函數
adjacent_find : 查重複數,返回首個元素iter測試
bianry_search
: 二分查找flexcount: 區間統計
urlcount_if: 範圍查找統計個數
equal: 比較
equal_range :區間元素比較
find:區間查找元素
find_first_of:區間查找第一次出現值
find_if : 條件查找
upper_bound:查找最後一個大於等於val的位置
lower_bound: 查找第一個大於等於val的位置
search:子序列查找位置
search_n:子序列查找出現次數
部分函數的測試代碼以下:
排序和通用算法
排序和通用算法就是用來給容器排序,主要的排序算法主要是有如下14個:
merge: 歸併排序,存於新容器
inpace_merge: 歸併排序,覆蓋原區間
sort: 排序,更改原容器順序
stable_sort: 排序,保存原容器數據順序
nth_element: 關鍵字排序
partition:範圍排序
partial_sort:範圍排序
partial_sort_copy:範圍排序外加複製操做
stable_partition: 範圍排序,保存原容器順序
random_shuffle: 隨機排序
reverse:逆序原容器
reverse_copy: 逆序容器保存到新容器
rotate:移動元素到容器末尾
rotate_copy:移動元素到新容器
部分函數的測試代碼以下:
對於排序,值得一說的是list是不能採用通用排序算法sort,只能使用內置的sort函數哦。
刪除和替換算法
刪除和替換算法通常都會修改容器的存儲現狀,通常處理刪除和替換的算法主要有如下的15種:
copy: 拷貝函數
copy_backward: 逆序拷貝
iter_swap: 交換
remove: 刪除
remove_copy: 刪除元素複製到新容器
remove_if:條件刪除
remove_copy_if:條件刪除拷貝到新容器
replace:替換
replace_copy: 替換,結果放到新容器
replace_if: 條件替換
replace_copy_if:條件替換,結果另存
swap: 交換
swap_range:區間交換
unique:去重
unique_copy:去重,結果另存
部分函數的測試代碼以下:
![](http://static.javashuo.com/static/loading.gif)
排列組合算法
提供計算給定集合按必定順序的全部可能排列組合 ,主要有如下兩個:
next_permutation:下一個排序序列的組合
prev_permutation:上一個排序序列的組合
有意思的是這裏所說的上一個和下一次是什麼意思?所謂「下一個」和「上一個」,舉了一個簡單的例子:對序列 {a, b, c},每個元素都比後面的小,按照字典序列,固定a以後,a比bc都小,c比b大,它的下一個序列即爲{a, c, b},而{a, c, b}的上一個序列即爲{a, b, c},同理能夠推出全部的六個序列爲:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}沒有上一個元素,{c, b, a}沒有下一個元素。接下來用代碼簡單測試下,以下測試代碼:
![](http://static.javashuo.com/static/loading.gif)
算術算法
算術運算算法主要用來作容器的算術運算,使用的時候加上numeric頭文件,主要有如下4個:
accumulate:區間求和
partial_sum:相鄰元素的和
inner_product:序列內積運算
adjacent_difference:相鄰元素的差
部分函數測試代碼:
生成和異變算法
生成和一遍算法總共有如下6個下,相對於來講for_each用的相對於來講更多一些:
for_each:迭代訪問
fill:填充方式初始容器
fill_n:指定長度填充容器
generate_n:填充前n個位置
transform:一元轉換和二元轉換
關係算法
關係算法相似與條件表達式同樣的做用,主要用來判斷容器中元素是否相等等運算,主要有如下8個:
equal:兩容器元素是否都相同
includes:是不是包含關係
lexicographical_compare:比較兩個序列
max:求最大值
max_element:返回最大值的iterator
min:求最小值
min_element:求最小值的iterator
mismatch:找到第一個不一樣的位置
集合算法
集合算法主要是集合上的一些運算,例如集合加法:並集,集合的減法:差集,還有交集。主要有如下4個:
set_union:差集
set_intersection:並集
set_difference:保存第一個中有第二個沒有的元素
set_symmetric_difference:對稱差集
部分函數測試代碼以下:
堆算法
堆算法,就是把容器當作堆去操做,主要算法函數只有如下4個:
make_heap:生成一個堆
pop_heap:出堆
push_heap:入堆
sort_heap:堆排序
測試代碼以下:
尾言
本章節到此結束,做業:使用一些算法,分析上述算法的運行結果。
本文分享自微信公衆號 - C語言編程基礎(goodStudyCode)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。