2012-03-02 10 views
1

は、私はこのような配列があります。配列のすべての要素を特定の値に変更するにはどうすればよいですか?例えば

bool log[100000] 

をそして私は、私はTrueにログ内のすべての要素の値を設定したいループを持っています。言い換えれば、ループの各サイクルの後にログを記録するために行われた変更をすべて抹消したいのです。どうすればいい?私はすべてを変えるのではなく、100の値を言いましょうか? trueと最初の100個の要素を充填する

std::fill(begin(log), end(log), true); 

trueと配列全体を埋めるために

+1

通常、スタックを100,000個の 'bool'で無駄にしたくありません。 –

+0

これは難しいですか?たとえC++でなくてもforループを書いてこれを行うことができますか? –

答えて

5

std::fill(begin(log), begin(log) + 100, true); 

beginendとはC++ 11に追加されます。コンパイラとライブラリがそれらをサポートしていない場合は、代わりにstd::array<bool, N>を使用することを検討してください。beginendのメンバー関数があります。とにかくstd::arrayテンプレートを使用してください。オーバーヘッドがなく、標準的なシーケンスコンテナインターフェイスが用意されていて、C配列の愚かなセマンティクスを避けるのに役立ちます。

+0

また、 'std :: vector 'を考慮すると、メモリフットプリントが87%削減されます。 –

+1

@Rob:この場合、 'std :: vector 'と考えるべきです。非コンテナコンテナ 'std :: vector 'は避けるべきです。 –

+0

@Rob: 'std :: vector'はメモリのフットプリントをどのように減らすのですか?ありがとう。 – Lazer

関連する問題