私は最近次のコードに出くわしました。ループ外でmap.end()を計算する利点
std::map<int, int> m;
// insert into the map
std::map<int, int>::iterator endOfMap = m.end();
for(std::map<int, int>::iterator itr = m.begin(); itr != endOfMap; ++itr) {
}
事前にendOfMapを計算する利点はありますか?
for(std::map<int, int>::iterator itr = m.begin(); itr != m.end(); ++itr)
注:
私が見たコードは、要素の数百万人で、カスタムオブジェクトに文字列のマップでした。
彼らはおそらく計算速度が非常に近いでしょうが、最初の例を取ることができます。最初の例はすでに関数呼び出しを計算し、必要なものはすべてendOfMapに渡します。終了条件の2番目の例では、m.end()関数を複数回呼び出して、等しいかどうかをチェックします。それらが等しくないかどうかをチェックするのではなく、関数を複数回呼び出さないでください。 –
forループの繰り返しで、O(end())+ O(等価検査)とO(等価検査)を話しています。 –
マップのデータメモリ割り当てによるパフォーマンスの低下は、ループの外側でend()を呼び出すことによる改善を上回ります! – user997112