如果标准::名单被弃用?(Should std::list be deprecated?)

2019-07-04 19:16发布

据Bjarne的Stroustrup的幻灯片从他走出原生2012基调 ,插入和删除中std::list是在现代硬件上非常低效:

矢量击败名单大规模的插入和删除

如果这确实是真的,有什么用例是离开std::list ? 它不应该被弃用然后?

Answer 1:

Vector和清单解决不同的问题。 列表提供了,当你插入和删除其他元素的迭代从来没有变得无效的保证。 向量不保证做到这一点。

它不是所有的性能。 因此,答案是否定的。 列表不应该被弃用。

编辑除此之外,C ++不是设计上仅工作“现代化的硬件。” 它的目的是横跨宽得多的范围的硬件比是有用的。 我在金融业是一个程序员,我使用C ++,但如嵌入式设备,可编程控制器,心脏,肺机及其他无数其他领域也同样重要。 C ++语言不应该被单独设计与某些领域的需求,并考虑到某些类的硬件的性能。 只是因为可能不会使用名单并不意味着它应该从语言被弃用。



Answer 2:

是否一个向量优于列表或不还取决于元素的类型。 例如,对于int元素矢量确实非常快,因为大多数数据的适合的CPU高速缓存内,SIMD指令可用于数据拷贝。 因此载体的O(n)的复杂性并没有太大的影响。

但是关于较大的数据类型,在这里复制不转化为流操作,而是什么数据必须从所有的地方中获取? 此外,关于不具有大的CPU高速缓存,可能也缺乏SIMD指令的硬件是什么? C ++使用的不仅仅是现代化的台式机和工作站机等等。 自嘲的std ::名单出了问题。

什么是斯特劳斯说,在演示的是你选择适合您的数据的std ::名单之前,您应该确保它是你的特殊情况的正确选择。 换言之,基准和配置文件。 这肯定不会说你应该总是挑的std ::向量。



Answer 3:

没有,特别是不是基于一个特定的图形。 存在这样的情况,其中列表将执行比矢量更好。 请参阅: http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/

这就是无视非性能上的差异,正如其他人提及。

比亚在这一谈话的一点是不是说你不应该使用名单。 这是人们作出关于列表的表现太多的假设,往往变成是错误的。 他只是证明了立场,矢量应该永远是你的默认进入到容器类型,除非你确实找到需要的性能或列表的其他语义特征。



Answer 4:

当然不是。 的std ::列表是不同的数据结构。 比较不同的数据结构是其特性,优点或缺点良好指示。 但是,每一个数据结构有其优势。



文章来源: Should std::list be deprecated?