C++ Academy · レッスン

非変更アルゴリズム:find、count、all_of

コンテナの内容を変更せずに検索・検査します。

レッスン 1/414 ステップ

「非変更アルゴリズム:find、count、all_of」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

読み取り専用の操作

非変更アルゴリズムは、範囲を変更せずに調べます。<algorithm>に定義されています。

std::find

値と等しい最初の要素を検索します。イテレーターを返し、見つからない場合はendを返します。

#include <algorithm>
std::vector<int> v = {3, 1, 4, 1, 5};
auto it = std::find(v.begin(), v.end(), 4);
if (it != v.end()) std::cout << "found at " << (it - v.begin());

std::find_if

述語に一致する最初の要素を検索します。

auto it = std::find_if(v.begin(), v.end(),
    [](int x) { return x > 3; });

std::find_if_not

find_ifの反対で、述語に一致しない最初の要素を検索します。

std::countとstd::count_if

出現回数または一致する要素の数を数えます。ptrdiff_tを返します。

int n = std::count(v.begin(), v.end(), 1);            // count of 1s
int m = std::count_if(v.begin(), v.end(),
    [](int x) { return x > 2; });

std::all_of std::any_of std::none_of

範囲に対して述語を評価します。

  • all_of — すべての要素が一致する
  • any_of — 少なくとも1つの要素が一致する
  • none_of — 一致する要素がない
bool allPositive = std::all_of(v.begin(), v.end(),
    [](int x) { return x > 0; });
bool anyEven = std::any_of(v.begin(), v.end(),
    [](int x) { return x % 2 == 0; });

std::equal

2つの範囲を要素ごとに比較します。

std::vector<int> a = {1, 2, 3};
std::vector<int> b = {1, 2, 3};
bool same = std::equal(a.begin(), a.end(), b.begin());

std::mismatch

2つの範囲で異なる最初の要素の組を検索します。イテレーターのペアを返します。

std::adjacent_find

隣接する等しい要素の最初の組(または述語に一致する最初の組)を検索します。

std::vector<int> v = {1, 2, 2, 3};
auto it = std::adjacent_find(v.begin(), v.end());
std::cout << *it;   // 2

std::min_element std::max_element

最小または最大の要素を指すイテレーターを返します。比較方法を変えるには、述語を渡します。

auto it = std::max_element(v.begin(), v.end());
std::cout << *it;

std::for_each

各要素に対して関数を呼び出します。関数の戻り値は無視されます。

std::for_each(v.begin(), v.end(),
    [](int x) { std::cout << x << " "; });

Ranges版(C++20)

C++20では、2つのイテレーターの代わりに1つの範囲を受け取る、範囲対応のオーバーロードが追加されました。構文がより簡潔になります。

#include <ranges>
auto it = std::ranges::find(v, 4);
bool ok = std::ranges::all_of(v, [](int x) { return x > 0; });

クイックチェック

述語にすべての要素が一致する場合にのみtrueを返すアルゴリズムはどれですか。

まとめ

非変更アルゴリズムは、範囲を変更せずに調べます。find、count、all_of/any_of/none_of、min_element、equalなどがあります。C++20のrangesを使うと、1つの範囲を渡す簡潔な構文を利用できます。

無料で開始

AI チューターと学ぶ C++ — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「非変更アルゴリズム:find、count、all_of」レッスンは無料ですか?

はい。「非変更アルゴリズム:find、count、all_of」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「非変更アルゴリズム:find、count、all_of」で何を学びますか?

コンテナの内容を変更せずに検索・検査します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「非変更アルゴリズム:find、count、all_of」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 非変更アルゴリズム:find、count、all_of
  2. 変更アルゴリズム:transform、copy_if、replace
  3. ソートとパーティション:sort、stable_partition
  4. 数値アルゴリズム:accumulate、reduce、transform_reduce
← C++ Academyに戻る