据Bjarne的Stroustrup的幻灯片从他走出原生2012基调 ,插入和删除中std::list
是在现代硬件上非常低效:
矢量击败名单大规模的插入和删除
如果这确实是真的,有什么用例是离开std::list
? 它不应该被弃用然后?
据Bjarne的Stroustrup的幻灯片从他走出原生2012基调 ,插入和删除中std::list
是在现代硬件上非常低效:
矢量击败名单大规模的插入和删除
如果这确实是真的,有什么用例是离开std::list
? 它不应该被弃用然后?
Vector和清单解决不同的问题。 列表提供了,当你插入和删除其他元素的迭代从来没有变得无效的保证。 向量不保证做到这一点。
它不是所有的性能。 因此,答案是否定的。 列表不应该被弃用。
编辑除此之外,C ++不是设计上仅工作“现代化的硬件。” 它的目的是横跨宽得多的范围的硬件比是有用的。 我在金融业是一个程序员,我使用C ++,但如嵌入式设备,可编程控制器,心脏,肺机及其他无数其他领域也同样重要。 C ++语言不应该被单独设计与某些领域的需求,并考虑到某些类的硬件的性能。 只是因为我可能不会使用名单并不意味着它应该从语言被弃用。
是否一个向量优于列表或不还取决于元素的类型。 例如,对于int
元素矢量确实非常快,因为大多数数据的适合的CPU高速缓存内,SIMD指令可用于数据拷贝。 因此载体的O(n)的复杂性并没有太大的影响。
但是关于较大的数据类型,在这里复制不转化为流操作,而是什么数据必须从所有的地方中获取? 此外,关于不具有大的CPU高速缓存,可能也缺乏SIMD指令的硬件是什么? C ++使用的不仅仅是现代化的台式机和工作站机等等。 自嘲的std ::名单出了问题。
什么是斯特劳斯说,在演示的是你选择适合您的数据的std ::名单之前,您应该确保它是你的特殊情况的正确选择。 换言之,基准和配置文件。 这肯定不会说你应该总是挑的std ::向量。
没有,特别是不是基于一个特定的图形。 存在这样的情况,其中列表将执行比矢量更好。 请参阅: http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/
这就是无视非性能上的差异,正如其他人提及。
比亚在这一谈话的一点是不是说你不应该使用名单。 这是人们作出关于列表的表现太多的假设,往往变成是错误的。 他只是证明了立场,矢量应该永远是你的默认进入到容器类型,除非你确实找到需要的性能或列表的其他语义特征。
当然不是。 的std ::列表是不同的数据结构。 比较不同的数据结构是其特性,优点或缺点良好指示。 但是,每一个数据结构有其优势。