ブール値のベクトルがあります。n 番目から m 番目までの要素を に設定する必要がありtrue
ます。ループを使用せずにこれを行うエレガントな方法はありますか?
編集: の使用に関する問題を指摘したすべての人へのタンクvector<bool>
。ただし、jalf が提供するような、より一般的な解決策を探していました。
ブール値のベクトルがあります。n 番目から m 番目までの要素を に設定する必要がありtrue
ます。ループを使用せずにこれを行うエレガントな方法はありますか?
編集: の使用に関する問題を指摘したすべての人へのタンクvector<bool>
。ただし、jalf が提供するような、より一般的な解決策を探していました。
std::fill
またはヘッダーでトリックを行う必要がありますstd::fill_n
。algorithm
// set m elements, starting from myvec.begin() + n to true
std::fill_n(myvec.begin() + n, m, true);
// set all elements between myvec.begin() + n and myvec.begin() + n + m to true
std::fill(myvec.begin() + n, myvec.begin() + n + m, true);
bool のベクトル。背筋が震えます。
std::bitset (固定サイズのフラグ セットの場合) boost::dynamic_bitset (動的サイズのフラグ セットの場合)
下位 8 ビットを連続して設定します。
#include <bitset>
#include <iostream>
int main()
{
std::bitset<12> flags;
flags |= 0x0FF;
std::cout << flags;
}
私の知る限りではありません。std::for_each、std::replace、または std::fill などのアルゴリズムのいずれかを使用して、要素の範囲をループしているという事実を隠すことができますが、ループすることになります。
ブール値のベクトルを使用していると言った場合、特殊化 std::vector を使用している場合は、Herb Sutter によるこの記事の「bool について」セクションをお読みください。