16

ブール値のベクトルがあります。n 番目から m 番目までの要素を に設定する必要がありtrueます。ループを使用せずにこれを行うエレガントな方法はありますか?

編集: の使用に関する問題を指摘したすべての人へのタンクvector<bool>。ただし、jalf が提供するような、より一般的な解決策を探していました。

4

3 に答える 3

45

std::fillまたはヘッダーでトリックを行う必要がありますstd::fill_nalgorithm

 // 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); 
于 2009-07-16T16:21:40.243 に答える
5

bool のベクトル。背筋が震えます。

std::bitset (固定サイズのフラグ セットの場合) boost::dynamic_bitset (動的サイズのフラグ セットの場合)

下位 8 ビットを連続して設定します。

#include <bitset>
#include <iostream>


int main()
{
    std::bitset<12>      flags;
    flags   |= 0x0FF;

    std::cout << flags;
}  
于 2009-07-16T16:53:47.947 に答える
3

私の知る限りではありません。std::for_each、std::replace、または std::fill などのアルゴリズムのいずれかを使用して、要素の範囲をループしているという事実を隠すことができますが、ループすることになります。

ブール値のベクトルを使用していると言った場合、特殊化 std::vector を使用している場合は、Herb Sutter によるこの記事の「bool について」セクションをお読みください。

于 2009-07-16T16:28:58.713 に答える