C++ std::vector-专用化中没有data()函数?

C++ std::vector-专用化中没有data()函数?,c++,vector,boolean,std,C++,Vector,Boolean,Std,我试图使用几乎所有其他std::vector专门化中的adata函数,但我发现bool专门化中没有数据函数 文件规定: 专业化与非专业化具有相同的成员功能 矢量,不存在的数据、定位和定位返回除外 在这个专业中 这背后的技术原因是什么?为什么它不能简单地返回指向第一个元素的指针?std::vector。它不提供数据功能 您无法寻址它的元素,因为每个元素的大小都是1位的,并且机器上并没有指向单个位的指针 std::vector也是一种节省空间的方式 至于是否进行了优化,则由实现定义。一 潜在优化包括

我试图使用几乎所有其他std::vector专门化中的adata函数,但我发现bool专门化中没有数据函数

文件规定:

专业化与非专业化具有相同的成员功能 矢量,不存在的数据、定位和定位返回除外 在这个专业中

这背后的技术原因是什么?为什么它不能简单地返回指向第一个元素的指针?

std::vector。它不提供数据功能

您无法寻址它的元素,因为每个元素的大小都是1位的,并且机器上并没有指向单个位的指针

std::vector也是一种节省空间的方式 至于是否进行了优化,则由实现定义。一 潜在优化包括合并向量元素,以便 每个元素占用一个位,而不是sizeofbool字节

您可以使用

std::vector<bool>::reference
这就是所谓的结构位引用所使用的。这个结构由struct _Bit _迭代器使用,它是元素的迭代器。您可以在这里看到,在这个实现上取消引用这个迭代器并获取std::vector元素意味着什么:

//  typedef unsigned long _Bit_type;
// struct _Bit_reference
// {
//   _Bit_type * _M_p;
// ...
// };
//  typedef _Bit_reference  reference;

reference
    _Bit_iterator::operator*() const
    { return reference(_M_p, 1UL << _M_offset); }
向量。它不提供数据功能

您无法寻址它的元素,因为每个元素的大小都是1位的,并且机器上并没有指向单个位的指针

std::vector也是一种节省空间的方式 至于是否进行了优化,则由实现定义。一 潜在优化包括合并向量元素,以便 每个元素占用一个位,而不是sizeofbool字节

您可以使用

std::vector<bool>::reference
这就是所谓的结构位引用所使用的。这个结构由struct _Bit _迭代器使用,它是元素的迭代器。您可以在这里看到,在这个实现上取消引用这个迭代器并获取std::vector元素意味着什么:

//  typedef unsigned long _Bit_type;
// struct _Bit_reference
// {
//   _Bit_type * _M_p;
// ...
// };
//  typedef _Bit_reference  reference;

reference
    _Bit_iterator::operator*() const
    { return reference(_M_p, 1UL << _M_offset); }

不能有特定位的可引用数据。也许您最好使用std::bitset而不是专门的std::vector,后者实际上可以归结为std::vector专门化的等价物。

对于特定的位,不能有可引用的数据。也许您最好使用std::bitset而不是专门的std::vector,后者实际上可以归结为std::vector专门化的等价物。

即使每个字节包含8个元素,指向第一个元素的指针是否都是字节对齐的,因此可以可靠地寻址?没有指向位的指针。机器可以寻址的最小内容是charRight,但第一个元素是字节对齐的,因此可以准确寻址,no?std::vector甚至不一定将其数据存储在单个连续的数据块中memory@cmbasnett:您知道第一个元素是字节、32位整数还是64位整数吗?您不需要,因为这是一个实现细节。数据究竟应该返回什么?即使每个字节包含8个元素,指向第一个元素的指针是否应该是字节对齐的,因此可以可靠地寻址?没有指向位的指针。机器可以寻址的最小内容是charRight,但第一个元素是字节对齐的,因此可以准确寻址,no?std::vector甚至不一定将其数据存储在单个连续的数据块中memory@cmbasnett:您知道第一个元素是字节、32位整数还是64位整数吗?您不需要,因为这是一个实现细节。数据究竟应该返回什么?