2014-03-12 74 views
4

什麼我以前是1和0的字符串,我可以簡單地檢查一些範圍是否等於一個序列,我想:檢查布爾變量(範圍)的矢量等於1序列和0

if (myString.substr(0, 4) == "1110") ... 

出於記憶的原因,我將這個字符串變成了vector<bool>,因爲vector中的一個bool只需要1位而不是1個字節。

現在,這是一個問題。我想和substr做同樣的比較。也許沒有類似的東西:

if(myVector[0] == true && myVector[1] == true && ...) 

vector<bool> tmpVector; 
tmpVector.push_back(true); 
tmpVector.push_back(true); 
... 
if (myVector == tmpVector) ... 

有沒有更優雅的解決方案呢?

+0

bool是一個單字節嗎?我見過的大多數布爾類型都是帶符號的16位整數。 – Mauren

+1

TIL'std :: vector '由一系列位支持:) http://www.cplusplus.com/reference/vector/vector-bool/ –

+0

@DrewNoakes我很高興我的問題並非絕對無用。 :) – Saraph

回答

5
bool tmpVector[4] = {true, true, true, false}; 
if (std::equal(myVector.begin(), myVector.begin() + 4, tmpVector)) { 
} 
+0

如果不分配'tmpVector',這可能嗎? – Saraph

+2

@Saraph我不明白堆棧中的4個字節是如何擔心的,由於終止空字符的原因,這甚至會比先前的數組「1110」少一個字節。 – SirGuy

+3

@Saraph你需要某種類型的源數據進行比較,它必須存儲在某個地方。如果它是你經常比較的數據,則聲明它是'static const'。 –