既然在 C++11 版本中为标准包含添加了非成员begin()和end()函数,为什么没有添加非成员版本的rbegin()和rend()函数呢?begin()开始使用and的非成员版本后我觉得很傻end(),只是发现我现在必须在使用成员和非成员函数调用之间切换。(我意识到推出我自己的非成员版本rbegin()and是微不足道的rend(),但我想知道为什么没有将它添加到标准中)。
感谢您的输入。
对于以后看到这个的人,非会员rbegin()并且rend()已经在 C++14 中。
您可以通过手动使用 和 的结果来构建反向std::reverse_iterator范围。std::beginstd::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如果编译器不能从内部循环中消除增加的复杂性,可以想象可能会对性能产生不利影响。