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

voi*_*ter 17 c++ iterator stl c++11

由于在C++ 11修订版中为标准包含添加了非成员begin()end()函数,为什么还没有添加rbegin()和成员的非成员版本rend()?在开始使用非成员版本之后我感到愚蠢,begin()并且end()发现我现在必须在使用成员函数和非成员函数调用之间切换.(我知道这将是微不足道的推出我自己的非成员版本rbegin()rend(),但我不知道为什么这不是添加到标准).

感谢您的输入.

Pol*_*mer 7

对于后来看到这个的人,非成员rbegin()并且rend()已经在C++ 14中.


Pot*_*ter 5

您可以通过手动,以构建反向范围std::reverse_iterator上的结果std::beginstd::end.

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

template< typename iter >
std::reverse_iterator< iter > reverse( iter i )
    { return { i }; }
Run Code Online (Sandbox Code Playgroud)

有了这个,你就可以做到

std::sort( reverse( std::end( my_array ) ), reverse( std::begin( my_array ) ) );
Run Code Online (Sandbox Code Playgroud)

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