什么会有更好的性能,stl矢量或动态数组,只要我想在每次添加内容时重新分配它?
使用vectors :: iterator会比在数组上使用for循环更快吗?
如果有人能解释原因,那就太棒了。
答案 0 :(得分:6)
过早优化是邪恶的。标准C ++的处理方式是尽可能使用标准库容器。如果您想使用最符合您需求的容器:这是图表
来源:Original Image by Jameson Williams
有一天你可能需要大量优化和使用动态数组,但它应该是罕见的....有一天你还需要多线程安全的集合......等等......但是一般来说,std容器是要走的路。
答案 1 :(得分:3)
什么会有更好的性能,stl矢量或动态数组,只要我想在每次添加内容时重新分配它?
Stl向量在分摊的常量时间中插入(因为重新分配不是一直进行的,而预留是按因子1.5(最小值)发生的。)
因此,根据您的描述,矢量将比一直重新分配的速度快得多
使用vectors :: iterator会比在数组上使用for循环更快吗?
在一般情况下:完全相同。 但是,某些STL实现会在调试模式下生成检查,这会大大减慢容器迭代器的使用。
(注意大多数实现将vector / string迭代器实现为value_type*
的typedef)
如果有人能解释原因,那就太棒了。
答案 2 :(得分:2)
在这种情况下,什么会有更好的性能,stl矢量或动态数组,只要我想在每次添加内容时重新分配它?
stl vector
应该是胜利者,因为它不会重新分配每个时间[向量保证O(1)
摊销的插入时间]。但是,如果您的malloc实现针对此类用法进行了优化,则可能类似。
使用vectors :: iterator会比在数组上使用for循环更快吗?
这些应该是相同的,特别是因为vector :: iterator通常只是指向数组或其薄包装器的指针。
答案 3 :(得分:1)
速度没有区别,但vector
非常安全。这是因为函数只是由编译器内联,但是vector
带有大量的异常和边界检查(如果你要求的话),你在使用自己的原始数组时不会看到它们。