C++11:非成员rbgin()/rend()函数

C++11: Nonmember rbegin()/rend() Functions

本文关键字:rend 函数 rbgin 成员 C++11      更新时间:2023-10-16

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

感谢您的意见。

对于稍后看到此消息的人来说,非成员rbegin()rend()已经在C++14中了。

您可以在std::beginstd::end的结果上手动使用std::reverse_iterator来构造反向范围。

奇怪的是,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可能会对性能产生不利影响。