代码之家  ›  专栏  ›  技术社区  ›  Thomas Eding

反向指针迭代器的标准方式

  •  4
  • Thomas Eding  · 技术社区  · 11 年前

    有类似的东西吗 rbegin rend 指针?

    我有指向c样式字符串头部和尾部的指针,但希望为它们创建反向迭代器。

    我想知道是否有标准提供的方法,或者我是否必须为此编写自己的代码。

    编辑:我使用低级代码是有原因的。不 std::basic_string 等等。目标是使用 std::find 查找值的最后一次出现。

    2 回复  |  直到 11 年前
        1
  •  9
  •   David G    11 年前

    使用 std::reverse_iterator :

    #include <iostream>
    #include <iterator>
    
    int main() {
        const char* s = "abc";
        std::reverse_iterator<const char*> first(s + 3);
        std::reverse_iterator<const char*> last(s);
        for( ; first != last; ++first) {
            std::cout << *first;
        }
        std::cout << '\n';
        return 0;
    }
    
        2
  •  0
  •   splicer    5 年前

    新的C++2014标准包括数组的相应函数

    template <class T, size_t N> reverse_iterator<T*> rbegin(T (&array)[N]);
    template <class T, size_t N> reverse_iterator<T*> rend(T (&array)[N]);
    

    事实上,它们只使用std::reverse_iterator。

    因此,如果您的编译器不支持这些函数,您可以自己编写

    std::reverse_iterator<char *> first( tail );
    std::reverse_iterator<char *> last( head );