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

17
自从C++11修订版中为标准容器添加了非成员函数begin()end(),为什么非成员版本的rbegin()rend()函数没有被添加呢?我开始使用非成员函数调用begin()end()感觉很傻,因为现在需要在成员函数和非成员函数之间切换。(我意识到自己可以轻松创建自己的非成员版本rbegin()rend(),但我想知道为什么没有将其添加到标准中)。
感谢您的建议。

我记得在Going Native 2012的演示之一中提到过这个问题。看起来这些函数被简单地遗忘了,可能会在以后的标准中添加(会吗?)。 - André Caron
非成员函数 begin()end() 用于 C++11 新增的 for 循环语句。其他函数则不用。 - Bo Persson
2个回答

7

对于后来看到这篇文章的人,非成员函数 rbegin()rend() 已经在 C++14 中存在。


1
哈!这正是我所期望的。因为我看不到基于begin()非成员函数添加rbegin()的开销。拥抱C++14! - user2558887

5
您可以通过手动使用std :: reverse_iteratorstd :: 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可能会对性能产生不利影响,如果编译器不能从内部循环中消除添加的复杂性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接