代码之家  ›  专栏  ›  技术社区  ›  Emile Cormier

std::reverse\ iterator的缺点是什么?

  •  18
  • Emile Cormier  · 技术社区  · 14 年前

    boost的文档 specialized iterator adaptors boost::reverse_iterator

    这些缺点是什么?我似乎找不到对这些缺点的描述。

    后续问题:

    boost::reverse\u迭代器如何纠正这些缺点?

    1 回复  |  直到 14 年前
        1
  •  11
  •   Jonathan M Davis    14 年前

    好吧,最大的问题是它们不是前向迭代器,而且有些东西非常期待前向迭代器。所以,你必须做一些有趣的转换才能让事情顺利进行。列举一些问题

    1. erase() insert() 需要迭代器而不是反向迭代器。这意味着如果你使用一个反向迭代器 插入() 擦除() ,则必须使用反向迭代器的 base()

    2. 返回在插入方面与反向迭代器等效的正向迭代器。也就是说,在当前元素前面插入insert。因此,如果 基本() 给了你一个指向同一元素的迭代器。所以,它指向一个前方,你可以用它来插入。

    3. 因为 基本() 返回一个指向不同元素的迭代器,它是错误的元素 . 如果你打电话来 擦除() 关于迭代器 基本() ,您将从反向迭代器指向的元素中向前擦除容器中的一个元素,因此必须在调用之前递增反向迭代器 为了得到正确的前向迭代器 .

    4. 你是否可以使用 基本() 擦除() 擦除() 插入()

    如果您真的想知道各种迭代器类型之间的差异以及与之相关的问题,我建议您阅读scottmeyer的 有效STL . 它有一个关于迭代器的章节。

    编辑: 至于Boost的反向迭代器是如何纠正这些缺点的,恐怕我还不知道。我知道标准反向迭代器的一些缺点,在过去也曾被它们咬过一口,但我从来没有太多地使用过Boost,所以我对它们的反向迭代器一点也不熟悉。对不起的。