检查向量是否为二进制的快速而紧凑的方法

时间:2014-01-15 23:02:22

标签: c++ vector stl

检查std::vector<int> x的所有元素是否都是二元的最有效和最简洁的方法是什么?

我正在寻找一些更有效和/或紧凑的东西,而不是迭代元素,将它们与0和1进行比较,并在找到第一个非0或非1元素后停止。也许,没有办法更快地做到这一点,但更紧凑,更好 - 可能。

2 个答案:

答案 0 :(得分:8)

我猜你想要的是检查一个容器是否只包含零和一个?

在这种情况下,您可以使用例如std::all_of使用合适的谓词进行检查:

std::vector<int> x{ 1, 0, 0, 0, 1 };

if(std::all_of(std::begin(x), std::end(x), [] (int value) {
    return value == 0 || value == 1;
})) {
    std::cout << "Only contain 0's and 1's." << std::endl;
}

答案 1 :(得分:1)

只需使用std::find_if()与合适的lambda:

if (std::any_of(x.begin(), x.end(),
                [](unsigned int v) { return v & ~1u; })) {
    std::cout << "not all values are binary\n";
}