我需要一种低复杂度的有效方法来更改位集中位数范围的值:
bitset<1000000> bs;
我需要将值100到500设置为TRUE,例如。
以最低的复杂度实现这一目标的最快方法是什么?
使用循环肯定不够。
答案 0 :(得分:1)
普通的for循环是最简单,最快捷的方式:
std::bitset<1000000> bs;
for (unsigned i = start, stop = start + n; i != stop; ++i)
bs.set(i);
不幸的是:
bs
的大小,使用掩码/移位不是一种选择(例如,请参阅in bitset, can i use "to_ulong" for a specific range of bits?)bitset
的界面不支持范围/子块(例如What is the performance of std::bitset?)。 boost::dynamic_bitset中也存在相同的限制。另请注意,std::bitset
未附带iterators,因此无法与<algorithm>
库中的函数一起使用。
如果性能真的很重要,您可以考虑实施 ad-hoc 。