私はこれらの答えを両方とも読みましたが、ただ迅速な解決策が欲しかったので、何か恐ろしいものを実装しました。
ビット演算子をで動作させることはできますvector<bool>
が、コードはC ++標準ライブラリの実装に特化するか、低速形式にフォールバックする必要があります。operator|
これがGNUlibstdc++-v3の私のものです:
std::vector<bool> operator|(std::vector<bool> A, const std::vector<bool>& B)
{
if (A.size() != B.size())
throw std::invalid_argument("differently sized bitwise operands");
std::vector<bool>::iterator itA = A.begin();
std::vector<bool>::const_iterator itB = B.begin();
// c++ implementation-specific
while (itA < A.end())
*(itA._M_p ++) |= *(itB._M_p ++); // word-at-a-time bitwise operation
return A;
}
もちろんこれはかなり悪いです。誰かがGCCを更新し、新しいバージョンは別の方法で保存し、明らかな理由もなくコードが壊れます。