std :: list应该被弃用吗?

fre*_*low 10 c++ performance containers vector doubly-linked-list

根据Bjarne Stroustrup 在他的Going Native 2012主题演讲中幻灯片,在现代硬件中插入和删除是非常低效的:std::list

矢量vs列表

矢量节拍列表大量插入和删除

如果确实如此,还有什么用例std::list?那不应该被弃用吗?

Joh*_*ing 23

矢量和列表解决不同的问题.List提供了保证,当您插入和删除其他元素时,迭代器永远不会失效.矢量不能保证.

它不仅仅是性能.所以答案是否定的.不应该弃用列表.

编辑除此之外,C++不仅仅适用于"现代硬件".它旨在用于更广泛的硬件.我是金融行业的程序员,我使用C++,但其他领域,如嵌入式设备,可编程控制器,心肺机和无数其他领域同样重要.C++语言不应仅仅考虑某些域的需要以及某些类硬件的性能.仅仅因为可能不使用列表并不意味着它应该从语言中弃用.

  • 虽然,不幸的是,当名人们认为'size`必须是O(1)时,`list`确实遭到了抨击.`splice`是之前使用列表的最佳理由之一,现在它没有用,如果你需要它,你最好自己制作一个容器:x (4认同)

Nik*_* C. 8

向量是否优于列表也取决于元素的类型.例如,对于int元素,矢量确实非常快,因为大多数数据适合CPU高速缓存,SIMD指令可用于数据复制.因此,向量的O(n)复杂度没有太大影响.

但是更大的数据类型呢,其中复制不会转换为流操作,而是必须从所有地方获取数据?另外,那些没有大CPU缓存且可能还缺少SIMD指令的硬件呢?C++不仅仅用于现代桌面和工作站机器.弃用std :: list是不可能的.

Stroustrup在该演示文稿中说的是,在为数据选择std :: list之前,应该确保它是适合您特定情况的正确选择.换句话说,基准和配置文件.它绝对不会说你应该总是选择std :: vector.