RandomAccessIterator是否暗示数据在内存中是连续的?

时间:2016-06-08 15:08:28

标签: c++ iterator random-access

其他迭代器类型肯定没有暗示它们指向连续数据,但我想知道我是否可以将RandomAccessIterators视为指向连续数据的缓冲区 - 即它们可能是转换为指向数据的指针。

这个假设是否正确?如果&*it是RandomAccessIterator,我是否可以始终安全地使用it并获取指针,而不仅仅指向一个元素,而是指向连续缓冲区?

1 个答案:

答案 0 :(得分:6)

不,这不是一个有效的假设。标准库本身在std::deque中有一个反例:

from cppreference

  

std::vector相反,双端队列的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小的数组。

std::deque的{​​{1}}是RandomAccessIterator:

[deque.overview]/1

  

deque是一个序列容器,与向量([vector])一样,支持随机访问迭代器。

如果你想要保证连续的内存,你不需要等待很长时间:保证将由ContiguousIterator在C ++ 17中提供。 1

ContiguousIterator概念是在以N4284结尾的文档序列中提出的,并在November 2014中采用