MSVS 2015:vector <bool>没有'data'成员

时间:2015-09-21 13:33:35

标签: c++ c++11 visual-studio-2015 std stdvector

我有以下编译好的代码:

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编译的。

2 个答案:

答案 0 :(得分:6)

vector<bool>专精的全部要点是,与所有其他向量不同,vector<bool>中的数据不需要存储为bool的数组。通过在单个字节中打包多个位,可以更有效地存储它。因此,bool *成员可能无法返回data()

答案 1 :(得分:2)

通常vector<T>将数据存储为T的一个连续块,因此可以返回指向数组的指针。

vector<bool>在1个字节中存储了几个布尔值,因此无法返回这样的指针