【发布时间】:2020-08-22 05:40:43
【问题描述】:
在某些情况下,我必须遍历数组/向量来寻找满足涉及元素值的条件的元素。过去我会选择一个简单的 for 循环和一个if 声明,不过最近看到一段代码,看起来更简单。准确的说:
我以前是这样的:
for( int i = 0; i < vector.size(); i++ )
if( condition[i] )
do_stuff;
现在我对这个很好奇:
int i = 0;
while( i < vector.size() || condition[i] )
i++;
我喜欢这个定义,它更短,事实上我相信它更容易阅读,但困扰我的是向量为空的情况。
我不确定|| 处理布尔值的方式,它是否检查第一个条件,如果它为假,则检查第二个条件?还是它仍然检查两者?如果是这种情况,应该有一个错误,因为我正在检查一个不存在的元素的条件。
在一个空向量上尝试了代码后,它编译并运行得很好,只是为了确保我也尝试了这个:
bool a , b = false;
if( b || a )
dostuff;
而且效果也很好。
但是对我来说,检查不存在值的条件似乎仍然不完全正确,我不确定是否应该使用它。可以吗?还是我应该去其他的东西?
任何帮助都会很棒。
编辑 0:由于向量为空,它仍然应该抛出错误。 0
【问题讨论】:
-
i < vector.size() || condition[i]即使是短路评估也是错误的,因为如果第一部分是false,第二部分将被检查 并且i将被排除在外界限。
标签: c++ boolean boolean-operations