C ++ 11:Nonmember rbegin()/ rend()函数

时间:2012-04-07 04:08:04

标签: c++ stl iterator c++11

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

感谢您的意见。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

您可以在std::reverse_iteratorstd::begin的结果上手动使用std::end来构建反转范围。

奇怪的是,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可能会对性能产生负面影响。