Bar*_*rry 17
为清晰起见,我会利用新算法:
// all true
std::all_of(vec.begin(), vec.end(), [](bool v) { return v; });
// all false
std::all_of(vec.begin(), vec.end(), [](bool v) { return !v; });
std::none_of(vec.begin(), vec.end(), [](bool v) { return v; });
Run Code Online (Sandbox Code Playgroud)
在没有实际检查向量的每个元素的情况下,您无法确定向量中的所有元素是否都为真.最好的情况是,您以不同的方式重新解释内存并一次检查多个元素,但是您仍然需要检查所有内容,直到找到一个未通过测试的内容.
最简单的 IMO 是免费find功能
if (std::find(begin(v), end(v), true) == end(v)) // All false
Run Code Online (Sandbox Code Playgroud)
这需要循环,但至少会利用短路行为。
bool all = true;
std::vector<bool>::iterator it = myVec.begin();
while(all && it != myVec.end()) // Stops early if it hits a false
{
all &= *it;
++it;
}
Run Code Online (Sandbox Code Playgroud)
如果all是true,则向量中的所有元素均为 true。如果all为 false,则至少有一个元素不是true。