Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 非修飾アルゴリズム | イントロダクション
C++ STLコンテナとアルゴリズム

book非修飾アルゴリズム

メニューを表示するにはスワイプしてください

C++標準ライブラリの非修飾アルゴリズムは、コンテナの内容を変更せずに解析や検索を行うための手法。これらのアルゴリズムは、データの照会、条件の確認、要素の検索などに不可欠であり、基盤となるコンテナが変更されないことを保証。

よく使用される非修飾アルゴリズムには、std::findstd::countstd::all_ofstd::any_of などが含まれる。

これらのアルゴリズムは、std::vectorstd::liststd::set など幅広いコンテナに適用可能。例えば、std::find は特定の要素を検索し、std::count は値の出現回数を数える。std::all_ofstd::any_of のようなアルゴリズムは、検証やフィルタリングに最適であり、コンテナ全体にわたって効率的に条件を確認しつつ、基盤データが変更されないことを保証。

main.cpp

main.cpp

copy
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_ifstd::all_ofstd::any_of など)は、述語関数を引数として受け取ります。述語関数とは、関数、ラムダ、ファンクタなどの呼び出し可能オブジェクトであり、コンテナから要素を受け取り、その要素が特定の条件を満たすかどうかを示すブール値を返します。

  • 述語としてラムダ式を使用し、特定の値より大きいすべての数をカウントする;
  • std::vector 内のすべての要素が正であるかを確認する;
  • 明示的なループを書くことなく要素の検証やフィルタリングを行う。
Note
注意

述語関数は、コンテナを変更したり手動でイテレーションを導入したりすることなく、STLアルゴリズムの利便性を拡張する強力な手段です。

question mark

C++ STLにおける非修飾アルゴリズムの目的として最も適切な説明はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  7

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  7
some-alt