C++反转迭代器

C++ reverse an iterator

本文关键字:迭代器 C++      更新时间:2023-10-16

是否可以在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.但我想知道是否可以将迭代器转换为反向迭代器。这可能吗?

您只需调用参数上的std::make_reverse_iterator即可获得范围的反向视图。cpp 参考页面有一个演示。当然,这是假设逆转是可能的。

不,这在完全笼统的情况下是不可能的。例如,考虑一个单向链表,其中您只能沿一个方向迭代(即它是前向可迭代的,但不是双向可迭代的)。

在您的情况下,解决方案是让函数的调用方传递反向迭代器。

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