由于在C ++ 11修订版中为标准包含添加了非成员begin()
和end()
函数,为什么rbegin()
和rend()
函数的非成员版本还没有添加?在开始使用begin()
和end()
的非成员版本后,我觉得很傻,但却发现我现在必须在使用成员函数和非成员函数调用之间切换。 (我意识到滚动我自己的rbegin()
和rend()
的非成员版本是微不足道的,但我想知道为什么没有添加到标准中。)
感谢您的意见。
答案 0 :(得分:7)
对于稍后看到此内容的人,非成员rbegin()
和rend()
已经在C ++ 14中。
答案 1 :(得分:5)
您可以在std::reverse_iterator
和std::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
可能会对性能产生负面影响。