我有以下编译好的代码:
void foo::bar(const vector<int> arg) {
int* ptr = arg.data();
// do something with ptr
}
我需要为vector<bool>
void foo::bar(const vector<bool> arg) {
int* ptr = arg.data();
// error C2039: 'data': is not a member ofstd::vector<bool,std::allocator<_Ty>>'
// do something with ptr
}
vector<bool>
没有data()
成员的原因是什么?
此处(en.cppreference.com)我没有找到bool
std::vector
{{1}}案例的具体信息。
代码是使用MSVS 2015编译的。
答案 0 :(得分:6)
vector<bool>
专精的全部要点是,与所有其他向量不同,vector<bool>
中的数据不需要存储为bool
的数组。通过在单个字节中打包多个位,可以更有效地存储它。因此,bool *
成员可能无法返回data()
。
答案 1 :(得分:2)
通常vector<T>
将数据存储为T
的一个连续块,因此可以返回指向数组的指针。
vector<bool>
在1个字节中存储了几个布尔值,因此无法返回这样的指针