【发布时间】:2011-12-02 00:24:49
【问题描述】:
一个演示问题:给定两个std::bitset<N>s、a 和b,检查a 和b 中是否设置了任何位。
这个问题有两个相当明显的解决方案。这很糟糕,因为它创建了一个新的临时位集,并将值复制到各种地方,只是为了扔掉它们。
template <size_t N>
bool any_both_new_temp(const std::bitset<N>& a, const std::bitset<N>& b)
{
return (a & b).any();
}
这个解决方案很糟糕,因为它一次只运行一点,不太理想:
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;
}
有没有简单的方法来做到这一点?
【问题讨论】:
-
如果您不满意,请创建自己的课程。