2
檢查std::vector<int> x
的所有元素是否都是二進制的最有效和最緊湊的方法是什麼?檢查向量是否爲二進制的快速而緊湊的方法
我正在尋找更有效率的AND/OR壓縮元素,而不是僅迭代元素,將它們與0和1進行比較,並在找到第一個非0或非1元素後停止。也許,沒有辦法做得更快,但更緊湊,更好 - 可能。
檢查std::vector<int> x
的所有元素是否都是二進制的最有效和最緊湊的方法是什麼?檢查向量是否爲二進制的快速而緊湊的方法
我正在尋找更有效率的AND/OR壓縮元素,而不是僅迭代元素,將它們與0和1進行比較,並在找到第一個非0或非1元素後停止。也許,沒有辦法做得更快,但更緊湊,更好 - 可能。
我猜你想要的是檢查一個容器只包含零和一個?
在這種情況下,您可以使用例如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;
}
只需使用std::find_if()
用合適的拉姆達:
if (std::any_of(x.begin(), x.end(),
[](unsigned int v) { return v & ~1u; })) {
std::cout << "not all values are binary\n";
}
你的意思是說'double's是「二進制」?你的意思是你想要檢測它們是否代表接近0和接近1的值?因爲對於浮點類型,equals不起作用。 –
@MooingDuck,實際上包含整數值的雙打通常不會導致問題。我想知道的是這個問題背後的目的是什麼?附:這個問題只是編輯說'int'而不是'double'。 –
@MooingDuck,編輯的問題與'矢量' –