stl ベクトル内の要素の範囲を特定の値に設定するにはどうすればよいですか?
-
16-09-2019 - |
質問
ブール値のベクトルがあります。その要素を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 ::ビット集合 ブースト:: 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 を使用している場合は、「ブール値について」のセクションを読んでください。 ハーブ・サッターによるこの記事.
所属していません StackOverflow