3
  1. auto& myKey = myMap.rbegin()->first;
  2. auto& myKey = std::prev(myMap.end())->first;

myMap一定の順序付けられたマップです。どちらのアプローチも常に複雑です。rbegin()逆方向反復子を使用しますが、std::prev双方向反復子で動作します。それらの間に効率の違いはありますか?

4

1 に答える 1

2

の典型的な実装rbegin():

reverse_iterator rbegin()
{
    return reverse_iterator(end());
}

これは基本的に を行うのと同じstd::prev(myMap.end())です。したがって、理論的にはそれらは同一になります。ただし、reverse_iteratorコンパイラ オプティマイザーでは少し厳しい傾向があります。気にするなら、コンパイラで実際のリリース モード アセンブリ (またはアセンブリ出力を生成) をトレースして、違いがあるかどうかを確認することをお勧めします。

于 2016-03-12T06:45:10.773 に答える