根据Stroustrup的矢量与列表
Vector vs list according to Stroustrup
可能的重复:
您何时更喜欢使用std :: list< t>而不是std :: vector< t>?
我刚刚看过Bjarne Stroustrup的《潮流》的录音。我有点困惑。
在这次演讲中,他特别讨论了vector
vs list
问题,并建议在许多情况下,即使您插入并插入并从中间插入/从中间插入/删除,vector
也更快,因为编译器可以优化很多东西并像紧凑的结构一样。结论(我理解)是:首先使用vector
,然后再考虑您是否还需要其他东西。这听起来很合理,但是考虑到第一个观察,我应该考虑哪些标准?我一直认为,如果您深入插入/删除 - 使用列表。这里的某些主题提出了类似的建议。参见
STD :: Vector vs. STD :: List与STD :: SLIST的相对性能?
和
向量与stl中的列表
现在根据stroustrup,我错了。
当然,我可以写一些测试,并试图弄清在每种特定情况下要使用的方法,但是有理论方式吗?
偏爱 std::list
而不是 std::vector
的最重要动机是迭代器的有效性,不是性能。如果在插入或擦除时,您将其他迭代器带入容器中,则可能需要std::list
,因为它插入不会使任何迭代器无效,并且擦除仅将迭代器无效地删除到所删除的元素中。大约唯一一次std::list
会赢得绩效的时间是复制和分配非常昂贵,在这种情况下,修改包含类以降低复制和分配成本而不是切换到std::list
通常是一个更好的选择。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 关于Stroustrup C++书的自动和{}列表问题
- 使用带有初始值设定项列表的 Stroustrup PPP 书中的向量时出现编译错误
- 根据Stroustrup的矢量与列表