17

既然在 C++11 版本中为标准包含添加了非成员begin()end()函数,为什么没有添加非成员版本的rbegin()rend()函数呢?begin()开始使用and的非成员版本后我觉得很傻end(),只是发现我现在必须在使用成员和非成员函数调用之间切换。(我意识到推出我自己的非成员版本rbegin()and是微不足道的rend(),但我想知道为什么没有将它添加到标准中)。

感谢您的输入。

4

2 回答 2

7

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

于 2013-10-23T00:00:03.650 回答
5

您可以通过手动使用 和 的结果来构建反向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如果编译器不能从内部循环中消除增加的复杂性,可以想象可能会对性能产生不利影响。

于 2012-04-07T15:57:18.367 回答