代码之家  ›  专栏  ›  技术社区  ›  bremen_matt

C++反向迭代器

c++
  •  3
  • bremen_matt  · 技术社区  · 7 年前

    是否可以在C++中反转迭代器?

    例如,许多算法的设计原则是传递起始迭代器和结束迭代器:

    template <typename T>
    void func( Iterator begin, Iterator end ){
        ...
    }
    

    现在假设在内部,我需要在容器上向前和向后迭代:

    template <typename T>
    void func( Iterator begin, Iterator end ){
        // Iterate forward 
        ...
        // Iterate backward
        ...
    }
    

    我当然可以将负值传递给 std::advance

    2 回复  |  直到 7 年前
        1
  •  10
  •   StoryTeller - Unslander Monica    7 年前

    你可以打个电话 std::make_reverse_iterator 在参数上获取范围的反向视图。cpp参考页面有一个演示。这当然是假设反转是可能的。

        2
  •  7
  •   Bathsheba    7 年前

    不,这在一般情况下是不可能的。例如,考虑一个单链表,你只能在一个方向上迭代(也就是说)。 正向可调 但不是 双向可调 ).

    参考: https://en.cppreference.com/w/cpp/experimental/ranges#Iterators