日期:2023年8月24日
前言
C++ algorithm 函式庫中有許多好用的工具,例如排序用的 sort、反轉資料用的 reverse,在 APCS 及 能力競賽中都能使用 algorithm 函式庫,善用這些工具可以少寫很多程式碼。接下來的的程式碼中都省略了以下幾行
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
不會改變容器中元素的函式
all_of 測試範圍中是否所有的元素皆符合條件
語法為
all_of(起點位址, 終點位址, 條件);
測試範圍包含起點位址,不包含終點位址,如果範圍中所有的元素皆符合條件或是範圍中沒有任何元素回傳 1,如果有任何一個元素不符合條件回傳 0。例如以下的程式碼
bool isPositive (int n) {
return n > 0;
}
int main() {
vector<int> a = {1, 3, 5, -2, -4, -6};
cout << all_of(a.begin(), a.end(), isPositive) << endl; // 印出 0
cout << all_of(a.begin(), a.end(), [](int x){return x > 0;}) << endl; // 印出 0
vector<int> b = {1, 3, 5, 2, 4, 6};
cout << all_of(b.begin(), b.end(), [](int x){return x > 0;}) << endl; // 印出 1
vector<int> c;
cout << all_of(c.begin(), c.end(), [](int x){return x > 0;}) << endl; // 印出 1
return 0;
}
any_of 測試範圍中是否有任何一個元素符合條件
語法為
any_of(起點位址, 終點位址, 條件);
測試範圍包含起點位址,不包含終點位址,如果範圍中任何一個元素符合條件回傳 1,如果所有元素皆不符合條件或是範圍中沒有任何元素回傳 0。例如以下的程式碼
bool isPositive (int n) {
return n > 0;
}
int main() {
vector<int> a = {1, 3, 5, -2, -4, -6};
cout << any_of(a.begin(), a.end(), isPositive) << endl; // 印出 1
cout << any_of(a.begin(), a.end(), [](int x){return x > 0;}) << endl; // 印出 1
vector<int> b = {-1, -3, -5, -2, -4, -6};
cout << any_of(b.begin(), b.end(), [](int x){return x > 0;}) << endl; // 印出 0
vector<int> c;
cout << any_of(c.begin(), c.end(), [](int x){return x > 0;}) << endl; // 印出 0
return 0;
}