我知道你可以写出这样的语句:
if (num1 != a && num1 != b && num1 != c ..........&& num1 != z)
(do something);
但是有没有更简单的方法来将num1变量与其他26个变量进行比较呢?就像这样:
if (num1 != a,b,c,d,e,f,g.......)
(do something);
我知道你可以写出这样的语句:
if (num1 != a && num1 != b && num1 != c ..........&& num1 != z)
(do something);
但是有没有更简单的方法来将num1变量与其他26个变量进行比较呢?就像这样:
if (num1 != a,b,c,d,e,f,g.......)
(do something);
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;
}
否则,如果它们只是任意变量或表达式,那么您可能需要使用多个测试来完成。
std::unordered_set
可以在常数时间内提供这个功能。 - ildjarnstd::unordered_set
只存在于 C++0x 中。在此之前,您必须使用 boost::unordered_set
。 - Björn Pollexstd::
/std::tr1::
/boost::
声明已省略。:-] - ildjarn首先,良好的代码设计不应包含太多条件顺序。
如果您的情况确实是这样的,即尝试查看数字是否存在于列表中,其中列表实际上是变量的集合。您可以将这些数字输入列表(向量)并执行查找操作。
static ValueType values[] = { a, b, ... };
// ...
if ( std::find( begin( values ), end( values ), num )
== end( values ) )
如果情况允许,将变量存储在单独的类/结构中。
如果您的问题更多地涉及C++中是否有语法允许更小的if语句,则可以在问题中更清楚地表达。
default
是一个“万能匹配”,它处理所有没有明确case
的num
值。 - Paul R