Demonstration task: if two std::bitset<N> s, a and b check if any bit is set in either a or b .
There are two fairly obvious solutions to this problem. This is bad because it creates a new temporary bitset and copies the values to all kinds of places, just to throw them away.
template <size_t N> bool any_both_new_temp(const std::bitset<N>& a, const std::bitset<N>& b) { return (a & b).any(); }
This solution is bad because it goes one bit at a time, which is less than ideal:
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; }
Ideally, I could do something like this, where block_type is uint32_t or any type that stores 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; }
Is there an easy way to do this?
c ++ bitvector
Travis gockel
source share