改变std :: bitset中一系列位值的最有效方法

The most efficient method to change the value of a range of bits in std::bitset

本文关键字:有效 方法 一系列 std bitset 改变      更新时间:2023-10-16

我需要一个具有低复杂性的有效方法来改变位置中的一系列范围的值:

bitset<1000000> bs;

我需要将值从100设置为100至500。例如。

以最低的复杂性完成此操作的最快方法是什么?

使用循环肯定不够。

普通的循环是最简单,最快的方法:

std::bitset<1000000> bs;
for (unsigned i = start, stop = start + n; i != stop; ++i)
  bs.set(i);

不幸的是:

  • 给定bs的大小,使用蒙版/转换不是一个选项(例如,请参见bitset,我可以使用" to_ulong"特定范围的零件?)
  • bitset的接口不支持范围/子块(例如,std :: bitset的性能是什么?)。boost :: Dynamic_bitset中也存在相同的限制。

还考虑std::bitset不带迭代器,因此不能与<algorithm>库中的功能一起使用。

如果表现确实很重要,则可以考虑临时实现。