2016-04-12 16 views
4

bool個の連続ベクトルをC++で作成するにはどうすればよいですか?私はstd::vector<bool>を使用して多くの警告を読んで、私はstd::vector<double>にマスクを保存したいと思います。C++で連続したboolのboolを作る方法は?

私の目的をもう少し明確にするために、boolベクトルの要素には、私のstd::vector<double>の統計値を適用したいと思います。最高のパフォーマンスでそれを行うために、私はベクトルが連続していることを望んでいます。

+0

「標準::ベクター」だけではないのはなぜですか?私はマスクの部分を理解していませんでした。 – rodrigo

+0

データ分析のためのものです:マスクIは除外すべき要素に印を付けます。パフォーマンス上の理由からメモリに連続したマスクが必要です。 – Chiel

+1

@rodrigo 'ベクトル'は 'ベクトル'とは非常に異なって実装されています。 「ベクトル」の8個の要素は1バイトを占め、「ベクトル」の8個の要素は8バイトを占有する。 – PhotometricStereo

答えて

4

あなたの場合。おそらくそれらの中で最も重要なのは、必ずしも連続しているわけではないということです。そしてここに連続したはおそらく誤称です。ベクトル全体に割り振られたメモリは依然として連続している可能性がありますが、&vec[0] + i&vec[i]と同じではありません。

しかし、多くの他の多くの性質がまだあります。これは、たとえば、一定の時間ランダムアクセスを提供します。

ボトムライン - 単に恐れていないだけでなく、その意味合いを理解してください。

+0

実際にデータが連続しているとはどういう意味ですか? – Chiel

+2

@Chiel、私はそのようなベクトルがまだ一定時間ランダムアクセスを提供するつもりであることを意味します。それを達成する唯一の方法は、パックされたブール値を連続したメモリとして保存することです。結果として、それはまだキャッシュフレンドリーになるでしょう。 – SergeyA

+1

@Chielを理解し、プロファイル、プロファイル、プロファイルを理解します。それを確かめるためには、軌道からサイトを狙っているだけです。 – user4581301

0

使用std::bitset クラスは、ブール要素の配列をエミュレートしますが、より引用スペース割り当て 用に最適化:あなたは、彼らがneccessarily適用できないそうであるように、人々は、std::vector<bool>と問題の発見、特定の問題が何であるかを知っておく必要がありhttp://www.cplusplus.com/reference/bitset/bitset/

+3

'std :: bitset'のサイズはコンパイル時に知っていなければなりません。 OPがベクトルを使用している場合、サイズを知ることができず、これは 'std :: bitset'を使用できないことを意味します。 – NathanOliver

+0

よく知られているサイズのビットセットのベクトルを使って散歩最適化を書くこともできます – Rama

+0

ビセットは連続していませんが、私の知る限りでは具体的な質問でした... – Chiel

関連する問題