繁体   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