【发布时间】:2013-03-03 17:53:21
【问题描述】:
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(我认为仅在 C++11 中的 std::string)实际上保证了底层的连续缓冲区 - 但这种保证是 std::vector 独有的还是有一个定义的“概念”表示提供连续内存的通用Sequence 类?
【问题讨论】:
-
据我所知,没有这个概念。
std::vector、std::string和std::array只是在[0, c.size())中具有c.data() + i == &c[i]fori的不变量。 -
@Xeo:对。没有概念,只是要求元素(或
char_types)“连续存储”。 -
@Xeo 别忘了std::valarray :)
-
@Mihai:哈哈,被遗忘的兄弟。
-
我认为答案是否定的。 RandomAccess 可能是最接近的,但 std::deque 是明显的反例。
标签: c++ c++11 containers std language-lawyer