【发布时间】:2018-07-02 11:17:55
【问题描述】:
我有一个自定义容器,它通过唯一 ID(简单的 int64)提供对其元素的访问。此 ID 不是索引悬停器,因此容器的用户不必关心内部元素的顺序。
我已经实现了最简单的前向迭代器,它提供了operator++ 以便能够将容器与基于范围的 for 循环一起使用。
但是现在,我想通过生成随机数并使用std::next从容器中获取随机元素,所有这些都是在恒定时间内完成的,所以前向迭代器是不够的,因为它的operator++将被调用N次引入线性复杂。为了实现恒定速度,我必须提供operator+=,这将使我的前向迭代器成为一种随机访问迭代器(容器能够提供恒定时间访问)。我在这里正确吗?如果是这样,它会引入一个 order 的概念,它并不真正适用于我的容器。
所以,我需要恒定时间随机访问,但不需要像vector 中的严格顺序,例如。我的逻辑错误在哪里?
【问题讨论】:
-
@Slava 编辑了问题
-
“随机访问”是否意味着您从容器中获取 any 元素,或者具有特定 id 的元素?
-
如果您提供了
operator++,您的容器是否已经有订单,即使它与存储的对象无关? -
在这种情况下,我可能会编写一些
random_element()函数返回一个引用(或迭代器),而不用费心更改迭代器的实现。 -
您可以使用
operator+=的迭代器,它本身不是 RandomAccessiterator,并满足您的对恒定时间访问的要求。
标签: c++ iterator containers random-access