17

begin()C ++ 11リビジョンでは、非メンバーバージョンとend()関数が標準のcontainsに追加されたのに、非メンバーバージョンのとrbegin()関数rend()も追加されなかったのはなぜですか?begin()との非メンバーバージョンを使い始めた後はばかげていると感じend()ますが、メンバー関数呼び出しと非メンバー関数呼び出しの使用を切り替える必要があることに気付きました。rbegin()(との非メンバーバージョンを自分でロールするのは簡単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 に答える