创建一个指向vector <vector <bool >>中元素的指针

时间:2019-09-07 22:37:37

标签: c++ pointers vector boolean

如果我想要一个指向int向量的向量中的元素的指针,我会写:

vector<vector<int>> a (5);
int* p1 = a[4].data();

但是,当我写以下内容时,它不适用于布尔向量的向量(为什么?)

vector<vector<bool>> b(5);
bool* p2 = b[4].data();

编译器输出以下错误消息:

Semantic issue: Error: Cannot initialize a variable of type "bool*" with an rvalue of type "void".

1 个答案:

答案 0 :(得分:4)

不幸的是,

std::vector<bool>是一种专门化,可以通过仅对每个元素使用一点来节省空间。这不能保证,但是会发生。

这种情况意味着无法使用指向元素的指针(C ++中对象的最小大小为一个字节),并且std::vector的许多其他细节也不适用于{{1} }。

请不要使用它...如果您需要位打包自己实现(至少您知道以便携式方式获得的东西),并且如果您不关心位与字节的节省,则只需使用{而是使用{1}}(这是真实的std::vector<bool>)。

std::vector<unsigned char>专业化基本上是C ++的一个错误,它没有有意义的用途。不提供任何保证的优势,并且将来可能会产生问题(例如,即使对于目前不需要适当的标准迭代器的代码,可能是代码需要演变为需要它们的情况,并且如果您使用了std::vector,那么您注定要失败。