STL中的算法庫總結(jié)

1. 不修改序列的操作

all_of: 判斷是否所有元素都滿足某條件
any_of: 判斷是否存在一個以上元素滿足某條件
none_of: 判斷是否任何一個元素都不滿足某條件

for_each: 對于每一個元素, 執(zhí)行某函數(shù)

count: 判斷等于某個值的元素數(shù)量
count_if: 計算滿足某條件的元素數(shù)量

mismatch: 找到兩個序列中第一個值不同的位置

equal: 判斷兩個序列是否相等(第二個允許一部分來比較)

找到第一個滿足條件的元素
find:  找到等于某個值的
find_if: 找到滿足某條件的
find_if_not: 找到不滿足某條件的
find_end: 找到最后一個子串
find_first_of: 找到第一個子串
adjacent_find: 找到第一個等值元素組成的子串
search: 找到一個子串第一次出現(xiàn)的地方
search_n: 查找長度為n的等值串的數(shù)量

2. 修改序列的操作

copy: 拷貝序列
copy_if: 拷貝符合某條件的
copy_n: 拷貝n個元素
copy_backward: 拷貝一個列表到某個位置, 不是往后, 是往前;
move: 將一個序列里的元素移動到其他位置, 移動后原序列是有效值, 但可能變了
move_backward: 移動元素, 從后往前
fill: 都設(shè)置為某個值
fill_n: 將前n個元素設(shè)置為某個值
transform:  將一個range里的元素, 用某個函數(shù)進行修改后, 放到另一個位置去
generate: 將一個序列里的元素, 用生成器賦值;
generate_n: 用函數(shù)生成前n個
remove: 把要刪除的等于某個值的元素, 集合成一個range, 放到序列的尾部
remove_if: 刪除符合某個條件的, 也只是移動, 不真正刪除;
remove_copy: 將除了要刪除的等于某個值的元素之外, 復(fù)制到另一個位置;
remove_copy_if: 將除了要刪除的符合某個條件的元素之外, 復(fù)制到另一個位置;
replace: 將等于某個值的所有元素都替換為另一個元素;
replace_if: 將符合某個條件的所有元素都替換為另一個元素;
replace_copy: 拷貝和 替換一起做, 替換的是等于某個值的
replace_copy_if: 拷貝和替換一起做, 替換的是符合某個條件的
swap: 交換兩個對象的值
swap_ranges: 交換兩個range
iter_swap: 交換兩個迭代器指向的元素的值
swap_ranges: 交換兩個ranges里面的元素
reverse: 對range里面的元素反序
reverse_copy: 先拷貝再反序
rotate: 把range里面的兩段對換
rotate_copy: 先拷貝再對換
shuffle: 打亂元素位置
random_shuffle: 隨機打亂位置
unique: 將不唯一的元素唯一化, 刪除多余的重復(fù)元素
unique_copy:  先拷貝再唯一化

3. 劃分操作

is_partitioned: 是否已經(jīng)按照某規(guī)則進行和劃分
partition: 按照某種規(guī)則, 將序列分成兩部分(比如前半部分偶數(shù), 后半部分奇數(shù))
partition_copy: 拷貝并劃分
stable_partition: 劃分, 并且保持原來元素的相對位置(是穩(wěn)定的)
partition_point: 找到劃分點

4. 排序操作

is_sorted: 序列是否增序排序
is_sorted_until: 找到未排序的第一個元素(123452中的2)
sort: 對一個range進行排序
partial_sort: 對前n個元素排序
partial_sort_copy: 拷貝前n個元素并進行排序
stable_sort: 穩(wěn)定排序
nth_element:  把第n個位置上的元素, 設(shè)置為排序后應(yīng)該是的元素(比如找到排序后第5個元素)

5. 二分法搜索操作(Binary Search)

都是在排好順序的列表上操作
lower_bound: 找出第一個不小于給定元素的元素
upper_bound: 找出第一個不大于給定元素的元素
binary_search: 判斷一個元素是否在該序列中
equal_range: 找出等于某元素的子range

6. 集合操作(對于有序)

merge: 合并
inplace_merge: 就地合并
 includes: 判斷一個range是否包含另一個range
set_difference: 計算兩個集合中不同的部分中的第一個集合里的元素(a-b)
set_symmetric_difference: 找出集合的異
set_union: 找出集合的合集

7. 堆操作

is_heap: 給定的range是否大頭堆
is_heap_until: 找到range里面滿足大頭堆的最大的子range
make_heap: 生成一個大頭堆, 線性復(fù)雜度
push_heap: 將一個數(shù)壓入棧中, 對數(shù)復(fù)雜度
pop_heap:  出棧, 對數(shù)復(fù)雜度
sort_heap: 將一個堆轉(zhuǎn)換為升序列表, n*log(n)復(fù)雜度

8. 最小值/最大值操作

max: 找出最大元素, 根據(jù)輸入?yún)?shù)不同, 通常是常量復(fù)雜度, 但是對于列表是線性
max_element: 在range里找出最大的元素, 線性復(fù)雜度
min: 返回兩個元素中較小的, 或者列表中最小的;
min_element: 找出range里面最小的元素;
lexicographical_compare: 按照字典序比較兩個range的大小;
is_permutation: 判斷一個range里面是否有子range和另一個range在組合上是等價的
next_permutation: 生成另一個字典序比現(xiàn)在大的排序
prev_permutation: 生成另一個字典序比現(xiàn)在小的排序

9. 數(shù)字操作

itoa: 為一個range生成遞增的值
accumulate: 累計一個range里面的值
inner_product: 計算兩個range的內(nèi)積(類似矩陣相乘)
adjacent_difference: 生成毗鄰相加的序列(1,1,2,3,5,...)
partial_sum: 生成遞增序列(2,4,6,8,...)

10. C庫

qsort: 對數(shù)組中的元素進行排序
bsearch: 二分搜索法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 6,004評論 0 19
  • 作者:大海里的太陽原文地址:http://www.cnblogs.com/wxisme/ 前言 查找和排序算法是算...
    IT程序獅閱讀 2,623評論 0 63
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,923評論 0 33
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,303評論 0 52
  • 星期三/晴 意見交鋒很好,卻滿含對社會的不信任是怎么回事? 今天又談到職業(yè)的選擇問題,對于我來說,記者此類的媒體人...
    酒久里個丸子閱讀 175評論 0 0

友情鏈接更多精彩內(nèi)容