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