2016-04-03 47 views
0

有没有办法将多个boolean_expression放入if语句而不重新插入变量?多重布尔表达式,无需重新插入变量

实施例:

int x = 2; 
int y = 4; 
if(Map[y][x] == 0 || Map[y][x] == 1){...} 

不重复Map[ ][ ]

我是新来的,它会加快我的编码速度;

+1

你可以写一个'之开关/'case'。 –

+1

@πάνταῥεῖ如果我没有记错的话,您可以为每个案例只设置一个布尔表达式: –

+1

当然,但您可以穿过案例。等等,是在你有意的样本中交换索引参数吗?那么没有别的办法可以写了,不。 –

回答

0

编辑:原来的问题是打错了,根据OP。以下大部分内容适用于最初要求的内容。

不幸的是,C++不是一种心灵感应语言。在这里,我假定Map是某种二维向量,或者是概念上类似于二维向量的东西,并且operator[]用于访问其成员。

因此,如果您的意图是在这个二维向量类对象中比较两个值,那么您无法避免使用两次都使用operator[]。因为这是引用此对象中值的唯一方法。如果你必须引用或访问对象中的某些东西,那么这是唯一的方法。如果你必须做两个价值观,你无法绕过基本事实,你必须做两次。如上所述,如果您必须经常比较地图中的两个相关值 - 即两个索引与您的示例中的索引相同的值 - 您肯定可以编写一个小外观用于它:

template<typename obj, typename coord_t, typename value_t> 
auto obj_contains2(obj &&Obj, coord_t x, coord_t y, value_t a, value_t b) 
{ 
    return Obj[x][y] == a || Obj[x][y] == b; 
} 

然后用:

if (obj_contains2(Map, x, y, a, b)) 

但你不能真正避免使用这里的经营者,他们只是移动到一个角落里。您仍然必须使用operator []两次。某处。

+0

可以编辑你的答案,我想输入而不是地图[y] [x]地图[y] [x]我键入地图[y] [x]地图[x] [y] –

+0

你的错字改变了问题的基本面。 –

1

为什么你就不能像这样做:

int x = 2; 
int y = 4; 
auto val = Map[y][x]; 
if(val == 0 || val == 1){...} 
+0

我对C++ 11 auto不是很舒服,我仍然试图完全学习基础知识 –

+0

Auto在这里并不重要,我用它是因为我不知道Map [y]的结果类型是什么[ X]。如果您知道Map [y] [x]返回int,则可以用int替换auto。重点在于您使用变量(名为val)来保存搜索地图的结果,并将此变量用于其他表达式中。这样地图只搜索一次。 – Wacek