簡體   English   中英

std :: vector和std :: list find_if和max_element性能

[英]std::vector and std::list find_if and max_element performance

我對為std::vectorstd::list測試的代碼的性能感到困惑。 當涉及到find_ifmax_element時,這兩者之間有區別嗎?

就大O表示法而言,兩者具有相同的O(n)性能。 find_if可以更快地找到該元素,則find_if可以更少,但這對於兩個容器都是一樣的。)

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

兩種算法的計算復雜度均為O(n),但是向量在存儲的連續區域中分配其元素,這很可能會導致更高的緩存命中率。 另一方面,遍歷列表涉及分散的內存訪問模式,這很可能導致較高的高速緩存未命中率。

像往常一樣,在性能方面,在做出決定之前要進行測量。

對於max_element,將遍歷list和array的所有元素。 因此,就性能而言,兩者均為O(n)。

再次對於find_if,遍歷對於兩個數據結構都是線性的(O(n))。

我認為除了相對於每個常量的常量外,應該沒有太大的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM