2014-01-15 53 views
2

檢查std::vector<int> x的所有元素是否都是二進制的最有效和最緊湊的方法是什麼?檢查向量是否爲二進制的快速而緊湊的方法

我正在尋找更有效率的AND/OR壓縮元素,而不是僅迭代元素,將它們與0和1進行比較,並在找到第一個非0或非1元素後停止。也許,沒有辦法做得更快,但更緊湊,更好 - 可能。

+4

你的意思是說'double's是「二進制」?你的意思是你想要檢測它們是否代表接近0和接近1的值?因爲對於浮點類型,equals不起作用。 –

+1

@MooingDuck,實際上包含整數值的雙打通常不會導致問題。我想知道的是這個問題背後的目的是什麼?附:這個問題只是編輯說'int'而不是'double'。 –

+0

@MooingDuck,編輯的問題與'矢量' –

回答

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

只需使用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"; 
} 
相關問題