C++ 関数オブジェクトを使用して STL アルゴリズムを拡張するにはどうすればよいですか?

PHPz
リリース: 2024-04-25 22:18:02
オリジナル
484 人が閲覧しました

STL アルゴリズムは、関数オブジェクト (呼び出し演算子 (operator()) を含むクラスまたは構造体) を使用して拡張できます。たとえば、 std::sort アルゴリズムを使用してコンテナを並べ替える場合は、関数オブジェクトを比較関数として渡すだけです。関数オブジェクトを使用すると、要素の合計に指数関数を適用する合計関数をカスタマイズするなど、STL アルゴリズムをカスタマイズして 1^2 2^2 3^2 4 を変換できます。 ^2 結果 (30) は、累積のために std::accumulate アルゴリズムに渡されます。

如何使用 C++ 函数对象扩展 STL 算法?

C 関数オブジェクトを使用して STL アルゴリズムを拡張するにはどうすればよいですか?

C 標準テンプレート ライブラリ (STL) は、データのコレクションを簡単かつ効率的に処理するための強力なアルゴリズムを多数提供します。ただし、特定のニーズに合わせてこれらのアルゴリズムをカスタマイズする必要がある場合があります。 C 関数オブジェクトを使用すると、STL アルゴリズムを簡単に拡張して、このカスタマイズを実現できます。

関数オブジェクト

関数オブジェクトは、呼び出し演算子 (operator()) を持つクラスまたは構造体です。関数オブジェクトを呼び出すことで、通常の関数を呼び出すのと同じようにいくつかの操作を実行できます。

STL アルゴリズムの拡張

  • 関数オブジェクトを使用した STL アルゴリズムの拡張は非常に簡単で、関数オブジェクトをアルゴリズムのパラメーターの 1 つとして渡すだけです。 。
  • たとえば、カスタム比較関数を使用してコンテナを並べ替えるには、std::sort アルゴリズムを使用し、std::greater<> を渡すことができます。関数オブジェクトを比較関数として使用します。
std::vector<int> vec = {3, 1, 2, 4};
std::sort(vec.begin(), vec.end(), std::greater<>{});
ログイン後にコピー
  • 出力: [4, 3, 2, 1]

実際のケース: カスタム合計関数

次の実践的な例は、関数オブジェクトを使用して std::accumulate アルゴリズムをカスタマイズし、コンテナ内の要素の合計を計算し、指数関数を適用する方法を示しています。

struct ExpSum {
    int operator()(int a, int b) const {
        return a + std::pow(b, 2);
    }
};

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    int sum = std::accumulate(vec.begin(), vec.end(), 0, ExpSum{});
    std::cout << sum << std::endl;  // 输出:30(1^2 + 2^2 + 3^2 + 4^2)
}
ログイン後にコピー
このアプローチにより、カスタム ロジックを STL アルゴリズムに統合できるため、柔軟性が向上し、特定の要件を満たすことができます。

以上がC++ 関数オブジェクトを使用して STL アルゴリズムを拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート