非修飾アルゴリズム
メニューを表示するにはスワイプしてください
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アルゴリズムの利便性を拡張する強力な手段です。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 7
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 7