Как я могу кратко сравнить одну переменную со многими различными значениями? - PullRequest
6 голосов
/ 21 марта 2011

Я знаю, что вы можете написать выражение вроде:

if (num1 != a && num1 != b && num1 != c ..........&& num1 != z)
   (do something);

Но есть ли более простой способ сравнить переменную num1 с 26 другими переменными?Вроде как:

if (num1 != a,b,c,d,e,f,g.......)
   (do something);

Ответы [ 5 ]

8 голосов
/ 21 марта 2011

Если a..g являются непрерывными значениями констант / перечислений, просто используйте проверку диапазона.

if (num >= a && num <= g)
{
    do_something();
}
else
{
    do_something_else();
}

Если они несмежные, но постоянные, то, возможно, используйте оператор switch.

switch (num)
{
    case a:
    case b:
    case c:
    case d:
    case e:
    case f:
    case g:
        do_something();
        break;

    default:
        do_something_else();
        break;
}

в противном случае, если они являются просто произвольными переменными или выражениями, возможно, вам просто придется сделать это с несколькими тестами.

5 голосов
/ 21 марта 2011

Вы можете поместить a, ... ,z в std::set и затем использовать метод find этого набора, чтобы проверить, присутствует ли num1 там.Это имеет логарифмическую сложность, но не допускает короткого замыкания.

2 голосов
/ 21 марта 2011

Прежде всего, хороший дизайн кода не должен включать так много последовательностей условий.

Если ваш случай именно такой, каким он является, он пытается выяснить, существует ли число в списке, гдесписок на самом деле представляет собой набор переменных.Вы можете просто ввести эти числа в список (вектор) и выполнить операцию поиска.

0 голосов
/ 21 марта 2011

Использовать std :: find:

static ValueType values[] = { a, b, ... };
//  ...
if ( std::find( begin( values ), end( values ), num )
        == end( values ) )
0 голосов
/ 21 марта 2011

Храните переменные в отдельном классе / поразили, если ситуация позволяет это сделать.

Если ваш вопрос больше о том, существует ли в c ++ синтаксис, разрешающий выражение smaler if, то, возможно, сделайте это более понятнымв вопросе.

...