原創(chuàng)不易,轉載注明 http://blog.csdn.net/yp541118319/article/details/60769214
寫LeetCode時發(fā)現算法過程無差異,而最終的submission的runtime卻有3ms的差別。而其中唯一不同的就是vector的遍歷方式,一個使用了iterator,另一個使用了for。 查了一下各種經典,發(fā)現這微小的差異實際上是C與C++之間的差異。
最頻繁的操作就是訪問元素。而iterator使用的是迭代器遞增,for使用的是at(i)或者[i]。
iterator疊加步進,而for使用數組下標偏移,效率都是常量級的。在runtime上的細微差別就是C++封裝(模板、類)帶來的性能消耗。但是對比程序設計和編碼上的便利,這種消耗還是很值得。
兩種方式的性能就大相庭徑了。iterator依然是疊加步進,for使用的查詢對應到具體的數據結構就是二叉樹、鏈表等,這類數據結構的查詢效率最高也達不到常量級,runtime上差異肯定隨著數據量的增加而增大。
http://blog.csdn.net/c1347623993/article/details/9209767
新聞熱點
疑難解答