检查std::vector<int> x
的所有元素是否都是二元的最有效和最简洁的方法是什么?
我正在寻找一些更有效和/或紧凑的东西,而不是迭代元素,将它们与0和1进行比较,并在找到第一个非0或非1元素后停止。也许,没有办法更快地做到这一点,但更紧凑,更好 - 可能。
答案 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";
}