检查bool(范围)的向量是否等于1和0的序列

Sar*_*aph 4 c++ vector

之前我所拥有的是一串1和0,我可以简单地检查某个范围是否等于我想要的序列:

if (myString.substr(0, 4) == "1110") ...
Run Code Online (Sandbox Code Playgroud)

出于内存的原因,我已经将这个字符串化了vector<bool>,因为向量中的一个bool只需要1位而不是1个字节.

现在,这是一个问题.我想和我一样做比较substr.可能没有任何东西:

if(myVector[0] == true && myVector[1] == true && ...)
Run Code Online (Sandbox Code Playgroud)

要么

vector<bool> tmpVector;
tmpVector.push_back(true);
tmpVector.push_back(true);
...
if (myVector == tmpVector) ...
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?

tim*_*rau 5

bool tmpVector[4] = {true, true, true, false};
if (std::equal(myVector.begin(), myVector.begin() + 4, tmpVector)) {
}
Run Code Online (Sandbox Code Playgroud)

  • @Saraph你需要某种类型的源数据来进行比较,它必须存储在某个地方.如果它是你经常比较的数据,则声明它为`static const`. (3认同)
  • @Saraph我没有看到堆栈上的4个字节是如何担心的,这甚至比前一个数组"1110"更少一个字节,因为终止空字符. (2认同)