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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-29 13:19:14779ブラウズ

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

変数を複数の値と効率的に比較する

プログラミングでは、変数が複数のオプションのいずれかに一致するかどうかを確認することがよくあります。これはさまざまな方法で実現できますが、効率を優先することが重要です。

非効率な方法

OR などの論理演算子を使用して変数を複数の値と比較しようとすると、次のような結果が生じる可能性があります。非効率的なコードになります。例:

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

このアプローチでは、各論理式 (1 || 2, 2 || 3) が個別に評価されるため、無駄な処理が発生する可能性があります。

効率的なソリューションC 11

C 11 の 1 つの効率的な解決策には、 std::initializer_list。次のテンプレート関数は、変数と潜在的な一致の初期化子リストを受け取ります:

template <typename T>
bool is_in(const T&amp; 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 では、あらゆる環境で非常にうまく機能するさらに効率的なソリューションが導入されています。 type:

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

このテンプレート関数は完全転送を使用して各比較を効率的に評価し、その結果、手書きの比較と同等に実行されるコードが得られます。

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

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