【问题标题】:Does RandomAccessIterator imply that the data is continuous in memory?RandomAccessIterator 是否暗示数据在内存中是连续的?
【发布时间】:2016-06-08 15:08:28
【问题描述】:

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

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

【问题讨论】:

    标签: c++ iterator random-access


    【解决方案1】:

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

    from cppreference:

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

    std::dequeiterator 是一个 RandomAccessIterator:

    [deque.overview]/1

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

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


    ContiguousIterator 概念是在以N4284 结尾的一系列文档中提出的,并在November 2014 中被采纳

    【讨论】:

    • 值得一提的是,C++17 将添加ContiguousIterator 类别。
    • This is what I found。可悲的是,它只是一个为某些容器提供保证的概念,它没有添加相应的标签,因为它显然破坏了代码。
    • 很遗憾,C++17 中的ContiguousIterator 没有实际用途stackoverflow.com/a/52277825/8414561
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2011-10-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多