デモの問題: 2 つstd::bitset<N>
の が与えられ、a
との両方にb
ビットが設定されているかどうかを確認します。a
b
この問題には、かなり明白な解決策が 2 つあります。これは、新しい一時的なビットセットを作成し、値をあらゆる場所にコピーして破棄するため、悪いことです。
template <size_t N>
bool any_both_new_temp(const std::bitset<N>& a, const std::bitset<N>& b)
{
return (a & b).any();
}
この解決策は、一度に 1 ビットずつ進むため、理想的とは言えません。
template <size_t N>
bool any_both_bit_by_bit(const std::bitset<N>& a, const std::bitset<N>& b)
{
for (size_t i = 0; i < N; ++i)
if (a[i] && b[i])
return true;
return false;
}
block_type
理想的には、次のようなことができるようになるでしょuint32_t
うbitset
。
template <size_t N>
bool any_both_by_block(const std::bitset<N>& a, const std::bitset<N>& b)
{
typedef std::bitset<N>::block_type block_type;
for (size_t i = 0; i < a.block_count(); ++i)
if (a.get_block(i) & b.get_block(i))
return true;
return false;
}
これを行う簡単な方法はありますか?