STL アルゴリズムは、関数オブジェクト (呼び出し演算子 (operator()) を含むクラスまたは構造体) を使用して拡張できます。たとえば、 std::sort アルゴリズムを使用してコンテナを並べ替える場合は、関数オブジェクトを比較関数として渡すだけです。関数オブジェクトを使用すると、要素の合計に指数関数を適用する合計関数をカスタマイズするなど、STL アルゴリズムをカスタマイズして 1^2 2^2 3^2 4 を変換できます。 ^2 結果 (30) は、累積のために std::accumulate アルゴリズムに渡されます。
C 標準テンプレート ライブラリ (STL) は、データのコレクションを簡単かつ効率的に処理するための強力なアルゴリズムを多数提供します。ただし、特定のニーズに合わせてこれらのアルゴリズムをカスタマイズする必要がある場合があります。 C 関数オブジェクトを使用すると、STL アルゴリズムを簡単に拡張して、このカスタマイズを実現できます。
関数オブジェクト
関数オブジェクトは、呼び出し演算子 (operator()
) を持つクラスまたは構造体です。関数オブジェクトを呼び出すことで、通常の関数を呼び出すのと同じようにいくつかの操作を実行できます。
STL アルゴリズムの拡張
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) }
以上がC++ 関数オブジェクトを使用して STL アルゴリズムを拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。