C++连续序列概念

Cha*_*l72 7 c++ containers std language-lawyer c++11

C++标准库提供了各种"概念",用于指定容器对象的接口.例如,std::vector实现了Container,Sequence,RandomAccessContainer,和ReversibleContainer概念.

是否存在一个在C++ 03或C++ 11中指定的概念,它描述了一个Sequence保证元素之间连续内存的概念,以便:

static_cast<void*>(&some_sequence[N]) == static_cast<void*>(&some_sequence[0] + N)>

这将是一个有用的概念,因为它告诉您是否可以将Container与任何需要连续内存缓冲区的函数一起使用,例如std::istream::read.

我知道,在实践中,只有std::vector(我认为只std::string在C++ 11中)实际上保证了一个潜在的连续缓冲区 - 但这个保证是唯一的std::vector还是有一个定义的"概念",它表示一个Sequence提供连续内存的泛型类?

Thi*_*aut 0

从 C++03 开始​​,仅std::vector保证 (23.2.4.1):

向量的元素是连续存储的,这意味着如果 v 是一个向量,其中 T 是 bool 以外的某种类型,那么对于所有 0 <= n < v,它遵循恒等式 &v[n] == &v[0] + n 。尺寸()​​。

C++11 添加了 std::array,它是固定大小数组的包装器,并且也具有相同的属性。我认为没有办法知道任何容器是否具有这样的属性。