2016-09-26 12 views
0

vector<bool>bool *に素早く変換できるトリックはありますか?私は多くの細胞を保持するベクターを持っており、それをbool *配列に変換しなければなりません。私はループのためにそれをすることができますが、それは多くの時間がかかります。stoolベクトル<bool>をbool *配列に変換する速い方法

+3

あなたはブール値の配列を意味しますか?すなわち 'bool []'またはboolへのポインタの配列? –

+0

C++ 11以降、 'bool'にならないでしょうか。 – LogicStuff

答えて

5

ベクターから生の配列にデータをコピーせずにこれを行う方法はありません。理由は、std::vector<bool>は、要素ごとに1ビットしか格納しない(連続して格納されているにも関わらず)ためです。したがって、あなたは、通常のトリックを使用することはできません...

std::vector<Foo> v(10); 
Foo* p = &v[0]; 

しかし、これは、その浅いのような良いアイデアではありません。あなたは本当に深いコピーが欲しいでしょう...

bool* arr = new bool[v.size()]; 
std::copy(std::begin(v), std::end(v), arr); 
// ... 
delete[] arr; 

自分でメモリを管理したくない場合は、スマートポインタを使用できます。

auto arr = std::make_unique<bool[]>(v.size()); 
std::copy(std::begin(v), std::end(v), arr.get()); 

Obligatory coliru.

+3

C + 11の 'トリック'(生の配列にアクセスする)は、 'std :: vector :: data()'の助けを借りても表現できます。実際には 'std :: vector '。 – Banex

+1

@Banex私はあなたのコメントを理解していません。私たちは同意しているようです。 – erip

+1

標準によると、その実装はデータの格納方法に依存しますが、1ビット当たり1つのブールは保証されません! 使用された実装が 'vector '(https://isocpp.org/blog/2012/11/on-vectorboolを参照)の特殊バージョンを提供する場合、コピー速度は非常に高速になります。 – Trevir

関連する問題