ホームページ > バックエンド開発 > C++ > C で変数を複数の値と効率的に比較するにはどうすればよいですか?

C で変数を複数の値と効率的に比較するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-01 01:04:09
オリジナル
325 人が閲覧しました

How Can I Efficiently Compare a Variable to Multiple Values in C  ?

変数と複数の値の効率的な比較

特定のシナリオでは、変数を複数のオプションに対して同時に比較することが必要になります。通常、開発者は OR 演算子に手を伸ばします。ただし、このアプローチはしばしば複雑な問題を引き起こします。

理想的な解決策

理想的には、次のコードで例示されるように、複数のグループを区別する便利な方法を模索します。

if (num = (1,2,3))

else if (num = (4,5,6))

else if (num = (7,8,9))
ログイン後にコピー

C 11 を使用したソリューションstd::initializer_list

C 11 では、std::initializer_list を使用して目的の機能を実現できます。 is_in テンプレート関数を定義することで、変数をオプションのセットと効率的に比較できます:

#include <algorithm>
#include <initializer_list>

template <typename T>
bool is_in(const T& v, std::initializer_list<T> lst)
{
    return std::find(std::begin(lst), std::end(lst), v) != std::end(lst);
}
ログイン後にコピー

これにより、比較を簡潔に実行できます:

if (is_in(num, {1, 2, 3})) { DO STUFF }
ログイン後にコピー

C 17ソリューション: より効率的な

C 17 は高度に最適化されたソリューションを導入しましたこれはどの型でもうまく機能します:

template<typename First, typename ... T>
bool is_in(First &&first, T && ... t)
{
    return ((first == t) || ...);
}

// ...

// s1, s2, s3, s4 are strings.
if (is_in(s1, s2, s3, s4)) // ...
ログイン後にコピー

このバージョンは、C 11 の対応物とは異なり、文字列のような複雑な型に対しても効率的なコードを生成します。

以上がC で変数を複数の値と効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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