変数を複数の値と効率的に比較する
プログラミングでは、変数が複数のオプションのいずれかに一致するかどうかを確認することがよくあります。これはさまざまな方法で実現できますが、効率を優先することが重要です。
非効率な方法
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& 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 &&first, T && ... t) { return ((first == t) || ...); }
このテンプレート関数は完全転送を使用して各比較を効率的に評価し、その結果、手書きの比較と同等に実行されるコードが得られます。
以上がC で変数を複数の値と効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。