2013-06-12 106 views

回答

7

就big-O符號而言,它們都具有相同的O(n)性能。 (find_if可以少如果元件越早發現,但這是兩個容器也同樣如此。)

在實際掛鐘時間而言,載體將由於高速緩存一致性更好的表現;所有向量元素在內存中都是順序的,因此訪問它們將更好地利用CPU緩存。鏈接列表的元素可以散佈在整個內存中,並且您還需要遵循需要時間的列表鏈接。

+0

[Bjarne Stroustrup:C++ 11 Style](http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style) - 從幻燈片43開始。 – Naszta

4

兩種算法都在計算複雜性方面爲O(n),但在矢量存儲的連續區域,分配其元件,其將最有可能導致更高的高速緩存命中率。遍歷一個列表,在另一方面,涉及到這是更有可能導致更高的速度高速緩存未命中的分散存儲訪問模式。

與往常一樣,當涉及到性能,反正,做決策之前進行測量。

0

對於max_element,列表和數組的所有元素都將被遍歷。所以,在性能方面都是O(n)。

再次爲了find_if,遍歷將是線性(O(N))兩者的數據結構。

我不認爲應該沒有太大相對於每一個常數分開的差別。

相關問題