非修飾アルゴリズム
メニューを表示するにはスワイプしてください
C++標準ライブラリの非変更アルゴリズムは、コンテナの内容を変更せずに解析や検索を行うことを可能にします。これらのアルゴリズムは、データの照会、条件の確認、要素の検索などに不可欠であり、基盤となるコンテナが変更されないことを保証します。
最も一般的に使用される非変更アルゴリズムには、std::find、std::count、std::all_of、std::any_of などがあります。
これらのアルゴリズムは、std::vector、std::list、std::set など幅広いコンテナに適用できます。例えば、std::find は特定の要素を検索し、std::count は値の出現回数を数えます。std::all_of や std::any_of のようなアルゴリズムは、バリデーションやフィルタリング作業に最適であり、コンテナ全体にわたって効率的に条件を確認しつつ、基盤データが変更されないことを保証します。
main.cpp
1234567891011121314151617181920#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Using std::find to locate the value 5 auto it = std::find(numbers.begin(), numbers.end(), 5); if (it != numbers.end()) std::cout << "Found 5 at position: " << std::distance(numbers.begin(), it) << '\n'; else std::cout << "5 not found\n"; // Using std::count_if to count even numbers int even_count = std::count_if(numbers.begin(), numbers.end(), [](int n) { return n % 2 == 0; }); std::cout << "Number of even elements: " << even_count << '\n'; }
多くの非修飾アルゴリズム(std::count_if、std::all_of、std::any_of など)は、述語関数を引数として受け取ります。述語関数とは、関数、ラムダ、ファンクタなどの呼び出し可能オブジェクトであり、コンテナから要素を受け取り、その要素が特定の条件を満たしているかどうかを示すブール値を返します。
- 述語としてラムダ式を使用し、特定の値より大きいすべての数をカウント;
std::vector内のすべての要素が正であるかを確認;- 明示的なループを書くことなく要素の検証やフィルタリングを実現。
ノート
述語関数は、コンテナを変更したり手動でイテレーションを行うことなく、STLアルゴリズムの利便性を拡張する強力な手段。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 1
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 3. 章 1