我需要一种复杂度低的有效方法来更改 bitset 中一系列位的值:
bitset<1000000> bs;
例如,我需要将 100 到 500 的值设置为 TRUE。
以最低复杂性完成此任务的最快方法是什么?
使用循环肯定是不够的。
我需要一种复杂度低的有效方法来更改 bitset 中一系列位的值:
bitset<1000000> bs;
例如,我需要将 100 到 500 的值设置为 TRUE。
以最低复杂性完成此任务的最快方法是什么?
使用循环肯定是不够的。
普通的 for 循环是最简单、最快的方法:
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也存在同样的限制。还要考虑iteratorsstd::bitset
不附带,因此它不能与库中的函数一起使用。<algorithm>
如果性能真的很重要,您可以考虑临时实施。