0
我正在使用gprof分析代碼,我觀察到 - >運算符消耗大量時間。C++在地圖訪問和迭代中採用的時間
這是地圖的樣本定義。
map<int, vector<int> > myMap;
我有一個迭代器,
map<int, vector<int> >::iterator it;
我經常運行像循環:
for(it = myMap.begin(), it != myMap.end(); it++) {
//Do stuff
}
這是剖析
Function:
std::_Rb_tree_iterator<std::pair<int const, std::vector<ClassType*, std::allocator<ClassType*> > > >::operator->() const
Time Consumed:
20.18%
Number of Times function is called:
15285739415
Function:
std::_Rb_tree_iterator<std::pair<int const, std::vector<ClassType*, std::allocator<ClassType*> > > >::operator++(int)
Time Consumed:
2.90%
Number of Times function is called:
3825378111
從我的理解中的數據,+ +運算符計算下一個採用0的元素和 - >給出應該採取O(1)
時間的元素。 即使 - >運算符被稱爲多於++運算符,我認爲它不應該消耗這麼多時間。 不應該++
比->
運算符消耗更多的時間?
您是否正在編譯優化?在沒有優化的情況下進行性能分析並不具有代表性 –
另請注意,運算符+>被調用的次數是運算符++的4倍。這是打算?而且,該標準要求迭代器的所有操作都要分攤到接觸時間([iterator.requirements.general] P8)。因此,增量也是O(1) –
我正在編譯沒有優化。我將嘗試編譯優化。 - >因爲我更頻繁地訪問內存,所以稱爲多於++。如果++是O(1),那麼哪個運算符計算下一個節點?看看 - >的函數調用,我不認爲 - >計算下一個節點。 – Rajs123