找出向量中所有元素是否为假或真c ++的最快方法?

Lov*_*eow 6 c++ vector

我想知道是否有一种快速的方法来确定向量中的所有元素是假的还是真的?而不是使用循环检查每个元素?

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)

在没有实际检查向量的每个元素的情况下,您无法确定向量中的所有元素是否都为真.最好的情况是,您以不同的方式重新解释内存并一次检查多个元素,但是您仍然需要检查所有内容,直到找到一个未通过测试的内容.

  • 所以如果我在 vec 中的所有值都为真,它会返回真吗? (2认同)

MSa*_*ers 6

最简单的 IMO 是免费find功能

if (std::find(begin(v), end(v), true) == end(v)) // All false
Run Code Online (Sandbox Code Playgroud)


Cor*_*mer 1

这需要循环,但至少会利用短路行为。

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)

如果alltrue,则向量中的所有元素均为 true。如果all为 false,则至少有一个元素不是true