其他迭代器类型肯定没有暗示它们指向连续数据,但我想知道我是否可以将RandomAccessIterators视为指向连续数据的缓冲区 - 即它们可能是转换为指向数据的指针。
这个假设是否正确?如果&*it
是RandomAccessIterator,我是否可以始终安全地使用it
并获取指针,而不仅仅指向一个元素,而是指向连续缓冲区?
答案 0 :(得分:6)
不,这不是一个有效的假设。标准库本身在std::deque
中有一个反例:
与
std::vector
相反,双端队列的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小的数组。
std::deque
的{{1}}是RandomAccessIterator:
deque是一个序列容器,与向量([vector])一样,支持随机访问迭代器。
如果你想要保证连续的内存,你不需要等待很长时间:保证将由ContiguousIterator在C ++ 17中提供。 1
ContiguousIterator概念是在以N4284结尾的文档序列中提出的,并在November 2014中采用