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
と、マスクの操作/シフトはオプションではありません (たとえば、ビットセットを参照してください。特定の範囲のビットに「to_ulong」を使用できますか? )bitset
範囲/サブブロックをサポートしていません (例: std::bitset のパフォーマンスは? )。同じ制限がboost::dynamic_bitsetにも存在します。また、 iteratorsstd::bitset
が付属していないため、ライブラリ内の関数では使用できないことも考慮してください。<algorithm>
パフォーマンスが本当に重要な場合は、アドホックな実装を検討できます。