作者:王一哲
日期:2023年8月24日
C++ algorithm 函式庫中有許多好用的工具,例如排序用的 sort、反轉資料用的 reverse,在 APCS 及 能力競賽中都能使用 algorithm 函式庫,善用這些工具可以少寫很多程式碼。接下來的的程式碼中都省略了以下幾行
語法為
測試範圍包含起點位址,不包含終點位址,如果範圍中所有的元素皆符合條件或是範圍中沒有任何元素回傳 1,如果有任何一個元素不符合條件回傳 0。例如以下的程式碼
語法為
測試範圍包含起點位址,不包含終點位址,如果範圍中任何一個元素符合條件回傳 1,如果所有元素皆不符合條件或是範圍中沒有任何元素回傳 0。例如以下的程式碼
語法為
測試範圍包含起點位址,不包含終點位址,如果範圍中沒有任何一個元素符合條件或是範圍中沒有任何元素回傳 1,如果所有元素皆符合條件回傳 0。例如以下的程式碼
語法為
範圍包含起點位址,不包含終點位址。例如以下的程式碼,編譯後執行會印出 1 3 5 2 4 6。
語法為
範圍包含起點位址,不包含終點位址。如果有找到指定的元素,會回傳對應的迭代器,如果範圍中有好幾個指定的元素,只會回傳第一個;如果沒有找到指定的元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到符合條件的元素,會回傳對應的迭代器,如果範圍中有好幾個符合條件的元素,只會回傳第一個;如果沒有找到符合條件的元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到不符合條件的元素,會回傳對應的迭代器,如果範圍中有好幾個不符合條件的元素,只會回傳第一個;如果沒有找到不符合條件的元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到子序列,會回傳對應的迭代器,如果範圍中有好幾個子序列,只會回傳最後一個;如果沒有找到子序列,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到範圍2中任何一個元素,會回傳對應的迭代器,如果範圍1中有好幾個範圍2中任何一個元素,只會回傳第一個;如果沒有找到範圍2中任何一個元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到兩個相鄰且相同的元素,會回傳第一個元素對應的迭代器,如果範圍中有好幾組兩個相鄰且相同的元素,只會回傳第一組;如果沒有找到兩個相鄰且相同的元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,回傳值格式為 int。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,回傳值格式為 int。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,回傳值格式為兩個迭代器的 pair。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,回傳值格式為 1 或 0。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,回傳值格式為 1 或 0。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到子序列,會回傳對應的迭代器,如果範圍中有好幾個子序列,只會回傳第一個;如果沒有找到子序列,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。如果有找到連續且指定數量的特定元素,會回傳第一個元素對應的迭代器;如果沒有找到連續且指定數量的特定元素,會回傳終點位址對應的迭代器。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,存放資料的容器長度要大於、等於複製資料的數量。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,存放資料的容器長度要大於、等於複製資料的數量。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,存放資料的容器長度要大於、等於複製資料的數量,填入的資料仍然按照原來的順序。例如以下的程式碼。
語法為
範圍包含起點位址,不包含終點位址,存放資料的容器長度要大於、等於複製資料的數量。例如以下的程式碼,在說明書中像是第2行程式碼會清空 a 的內容,但是我測試時 a 仍然保有原來的內容。
語法為
範圍包含起點位址,不包含終點位址,存放資料的容器長度要大於、等於複製資料的數量,填入的資料仍然按照原來的順序。例如以下的程式碼,在說明書中像是第2行程式碼會清除 a[1]、a[2]、a[3],但是我測試時 a 仍然保有原來的內容。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
回傳值為範圍中沒有被移除的元素終點位址,例如以下的程式碼。
語法為
回傳值為範圍中沒有被移除的元素終點位址,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
回傳值為留下的資料終點位址,例如以下的程式碼。
語法為
回傳值為容器2填入資料的終點位址,例如以下的程式碼。
語法為
沒有回傳值,例如以下的程式碼。
語法為
不會改變容器1的內容。例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
可以使用內建的 rand 函式,並搭配 srant(time(NULL)),例如以下的程式碼。
語法為
使用 random 函式庫的 default_random_engine 函式,並搭配 chrono 函式庫的工具産生亂數種子,例如以下的程式碼。
語法為
如果所有元素都符合條件回傳 1,如果有任何一個元素不符合條件回傳0,例如以下的程式碼。
語法為
回傳值為分區位址對應的迭代器,例如以下的程式碼。
語法為
回傳值為分區位址對應的迭代器,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
回傳值為分區位址對應的迭代器,例如以下的程式碼。
語法為
比較式預設值為由小到大排序,也可以引用內建函式 greater 由大到小排序,或是依照自訂函式排序,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
比較式預設值為由小到大排序,如果採用預設值,中點位址前會放入整個範圍中由小到大排序的元素,再由中點位址開始放入剩下的元素,如以下的程式碼。
語法為
比較式預設值為由小到大排序,不會改變容器1的內容,例如以下的程式碼。
語法為
比較式預設值為由小到大排序,如果已排序回傳 1,如果未排序回傳 0,例如以下的程式碼。
語法為
如果所有元素都已經由小到大排序,回傳終點位址,例如以下的程式碼。
這些函式只能用在已經全部或部分排序的資料。
語法為
lower_bound 回傳值為指定元素左側的位址,upper_bound 回傳值為指定元素右側的位址,equal_range 回傳值格式為 pair,同時包含 lower_bound 及 upper_bound,例如以下的程式碼。
語法為
如果找到指定元素回傳 1,如果沒有找到指定元素回傳 0,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
如果是回傳 1,反之回傳 0,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
將容器1的元素刪除容器2中也有的元素,剩下的元素存入容器3,例如以下的程式碼。
語法為
對稱差是將聯集扣掉交集,例如以下的程式碼。
語法為
例如以下的程式碼。
語法為
min_element 及 max_element 回傳值為對應的迭代器,minmax_element 回傳值為迭代器的 pari,例如以下的程式碼。
以上是 algorithm 函式庫大部分的函式,其中我最常用到的函式為 sort、reverse、find、count、min、max,尤其是 sort,在競賽及檢定中經常用到,如果不使用 sort 就要當場寫氣泡排序或是快速排序,會浪費不少時間。
####### tags:C++