0
的我需要具有低複雜度的有效方法來改變位集的範圍內的比特的值的值:最有效的方法來改變在STD的範圍內的位的::位集
bitset<1000000> bs;
和例如,我需要將值從100到500設置爲TRUE。
在最低複雜度下完成此操作的最快方法是什麼?
使用循環將不能滿足。
的我需要具有低複雜度的有效方法來改變位集的範圍內的比特的值的值:最有效的方法來改變在STD的範圍內的位的::位集
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
大小,口罩工作/移動不是一個選項(例如,見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>
庫的功能使用。
如果性能真的很重要,你可以考慮專門實施。
我投票結束這個問題作爲題外話,因爲這不是一個代碼寫作服務,請顯示你的努力 – EdChum
但我不是要求代碼寫! –
@EbramShehata可能你可以提供一些嘗試,看看哪個更有效。 – Mine