将stl vector <bool>转换为bool *数组的快速方法

时间:2016-09-26 11:29:57

标签: c++ stl

是否有一些技巧可以将vector<bool>快速转换为bool *数组?我有矢量,保留了很多单元格,我必须将其转换为bool *数组。我可以通过for循环来完成,但需要花费很多时间。

1 个答案:

答案 0 :(得分:5)

如果不将数据从向量复制到原始数组,则无法执行此操作。

原因是因为std::vector<bool>每个元素只存储一位(尽管是连续存储的)。因此,你不能使用正常的技巧,即......

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.