fre*_*low 10 c++ performance containers vector doubly-linked-list
根据Bjarne Stroustrup 在他的Going Native 2012主题演讲中的幻灯片,在现代硬件中插入和删除是非常低效的:std::list
矢量节拍列表大量插入和删除
如果确实如此,还有什么用例std::list
?那不应该被弃用吗?
Joh*_*ing 23
矢量和列表解决不同的问题.List提供了保证,当您插入和删除其他元素时,迭代器永远不会失效.矢量不能保证.
它不仅仅是性能.所以答案是否定的.不应该弃用列表.
编辑除此之外,C++不仅仅适用于"现代硬件".它旨在用于更广泛的硬件.我是金融行业的程序员,我使用C++,但其他领域,如嵌入式设备,可编程控制器,心肺机和无数其他领域同样重要.C++语言不应仅仅考虑某些域的需要以及某些类硬件的性能.仅仅因为我可能不使用列表并不意味着它应该从语言中弃用.
向量是否优于列表也取决于元素的类型.例如,对于int
元素,矢量确实非常快,因为大多数数据适合CPU高速缓存,SIMD指令可用于数据复制.因此,向量的O(n)复杂度没有太大影响.
但是更大的数据类型呢,其中复制不会转换为流操作,而是必须从所有地方获取数据?另外,那些没有大CPU缓存且可能还缺少SIMD指令的硬件呢?C++不仅仅用于现代桌面和工作站机器.弃用std :: list是不可能的.
Stroustrup在该演示文稿中说的是,在为数据选择std :: list之前,应该确保它是适合您特定情况的正确选择.换句话说,基准和配置文件.它绝对不会说你应该总是选择std :: vector.