首页 文章

C 11:非成员rbegin()/ rend()函数

提问于
浏览
17

由于在C 11修订版中为标准包含添加了非成员 begin()end() 函数,为什么还没有添加 rbegin()rend() 函数的非成员版本?在开始使用 begin()end() 的非成员版本后,我觉得很傻,但却发现我现在必须在使用成员函数和非成员函数调用之间切换 . (我意识到滚动我自己的 rbegin()rend() 的非成员版本是微不足道的,但我添加了标准的'm wondering why this wasn') .

感谢您的输入 .

2 回答

  • 5

    您可以通过在 std::beginstd::end 的结果上手动使用 std::reverse_iterator 来构建反转范围 .

    奇怪的是, reverse_iterator 没有标准的工厂功能 . 如果有,它可能看起来像这样:

    template< typename iter >
    std::reverse_iterator< iter > reverse( iter i )
        { return { i }; }
    

    有了这个,你就可以做到

    std::sort( reverse( std::end( my_array ) ), reverse( std::begin( my_array ) ) );
    

    这个例子省去了指定 std::greater 比较器的麻烦,但是如果编译器无法从内部循环中删除增加的复杂性,则可以想象 reverse_iterator 可能会对性能产生负面影响 .

  • 7

    对于稍后看到此内容的人,非成员 rbegin()rend() 已经在C 14中 .

相关问题