ホームページ >バックエンド開発 >C++ >データの検証と変換に STL 関数オブジェクトを使用するにはどうすればよいですか?

データの検証と変換に STL 関数オブジェクトを使用するにはどうすればよいですか?

王林
王林オリジナル
2024-04-25 18:54:011135ブラウズ

STL 関数オブジェクトを使用すると、データの検証と変換が簡素化されます。検証関数オブジェクトはデータが有効かどうかを示すブール値を返し、変換関数オブジェクトは新しい値を返します。これらの関数オブジェクトをデータ コンテナーに適用すると、数値が 10 より大きいかどうかを検証したり、10 より大きい数値を 2 倍にしたりするなど、データの検証と変換を実行できます。

如何使用 STL 函数对象来进行数据验证和转换?

データ検証と変換に STL 関数オブジェクトを使用する

STL ライブラリには、データ検証を実行できる一連の関数オブジェクトが含まれていますデータコンテナに関するさまざまな操作と変換。これらの関数オブジェクトは、データ検証および変換タスクを簡潔かつ効率的に処理するのに非常に役立ちます。

関数オブジェクトの概要

関数オブジェクトは、通常の関数と同様に、他の関数から呼び出すことができるクラスまたは構造体です。これらには、関数呼び出し構文を使用してデータに適用できる演算子のオーバーロードがあります。

検証関数オブジェクト

  • ##unary_function940834c0422a33d37a595b51693c1a5f: この関数オブジェクトは 1 つのパラメータを受け取り、次のいずれかを示すブール値を返します。入力データは有効です。例:
  • struct IsEven {
        bool operator()(int x) {
            return x % 2 == 0;
        }
    };
  • binary_function1d55d48b2b7061560830d2857a28b418: この関数オブジェクトは 2 つのパラメータを受け取り、入力データが有効かどうかを示すブール値を返します。 。例:
  • struct IsInVector {
        bool operator()(int x, vector<int>& v) {
            return find(v.begin(), v.end(), x) != v.end();
        }
    };

Convert function object

    ##unary_functionabbd655bd3f9f929be0207abcc18a2ef
  • : この関数オブジェクトは 1 つのパラメータを受け入れ、新しい値を返します。例:
    struct DoubleValue {
        double operator()(int x) {
            return (double)x * 2;
        }
    };
    binary_functiona03c7273ce24cef13581dbd8653017cf
  • : この関数オブジェクトは 2 つのパラメータを受け取り、新しい値を返します。例:
    struct AddVectors {
        vector<int> operator()(vector<int>& v1, vector<int>& v2) {
            vector<int> result;
            for (int i = 0; i < v1.size(); i++) {
                result.push_back(v1[i] + v2[i]);
            }
            return result;
        }
    };
実際のケース: 数値ベクトルの検証と変換

次のベクトルについて考えます。数値が 10 より大きいかどうかを検証する必要があります。 10 より大きい数値を 2 倍します:

vector<int> numbers = {5, 12, 3, 18, 6};

次のように検証と変換に STL 関数オブジェクトを使用できます:

// 验证是否大于 10
bool is_greater_than_10(int x) {
    return x > 10;
}

// 加倍大于 10 的数字
double double_if_greater_than_10(int x) {
    return x > 10 ? x * 2 : x;
}

// 验证并对向量应用转换
vector<int> result;
transform(numbers.begin(), numbers.end(), back_inserter(result), double_if_greater_than_10);

これで、

result

ベクトルには変換された値が含まれます。ここで、10 より大きい数値は 2 倍になり、10 以下の数値は変更されません: <pre class='brush:cpp;toolbar:false;'>// 输出转换后的结果 for (int num : result) { cout &lt;&lt; num &lt;&lt; &quot; &quot;; } // 输出:5 24 3 36 6</pre>

以上がデータの検証と変換に STL 関数オブジェクトを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。