【发布时间】:2016-06-08 15:08:28
【问题描述】:
其他迭代器类型肯定不暗示它们指向连续数据,但我想知道我是否可以将 RandomAccessIterators 视为它们指向连续数据的缓冲区——即它们可以转换为指向数据。
这个假设正确吗?如果it 是RandomAccessIterator,我是否可以始终安全地使用&*it 并获得一个指针,不仅指向一个元素,而且指向一个连续缓冲区?
【问题讨论】:
标签: c++ iterator random-access
其他迭代器类型肯定不暗示它们指向连续数据,但我想知道我是否可以将 RandomAccessIterators 视为它们指向连续数据的缓冲区——即它们可以转换为指向数据。
这个假设正确吗?如果it 是RandomAccessIterator,我是否可以始终安全地使用&*it 并获得一个指针,不仅指向一个元素,而且指向一个连续缓冲区?
【问题讨论】:
标签: c++ iterator random-access
不,这不是一个有效的假设。标准库本身在std::deque中有一个反例:
与
std::vector不同,双端队列的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小的数组。
std::deque 的 iterator 是一个 RandomAccessIterator:
双端队列是一个序列容器,与向量 ([vector]) 一样,支持随机访问迭代器。
如果你想要保证连续的内存,你不需要等待很长时间:保证将由 C++17 中的 ContiguousIterator 提供。1
ContiguousIterator 概念是在以N4284 结尾的一系列文档中提出的,并在November 2014 中被采纳
【讨论】:
ContiguousIterator 类别。
ContiguousIterator 没有实际用途stackoverflow.com/a/52277825/8414561