cpp vector resize和重新生成新的vector耗时比较

【cpp vector resize和重新生成新的vector耗时比较】1.问题背景
在工作过程中遇到一个需要使用vector.resize(size),之后将vector中的数据统一重置为0的场景,然后想了一下,如果从一个比较小的内存区域resize到一个比较大的内存区域,就需要重新开一块内存空间,并且将原来空间的数据复制一遍,个人怀疑会不会直接用vector的构造函数来重新生成一块空间会比较好,上网搜了一下,都是讨论resize和reserve的,可能是这个问题太简单了,所以没人发到网上,所以我自己写了几行代码验证了一下。
2.代码验证

#include #include #include #include #include #include #include #include #include "base.h"void printFunctionTime(void(*f)(const std::vector&),const std::vector& sizes) { printf("the before time %d\n",time(nullptr)); f(sizes); printf("the after time %d\n",time(nullptr)); }void testResize(const std::vector& sizes) { std::vector vec(1); for(auto i:sizes) { vec.resize(i); } }void testReGen(const std::vector& sizes) { for(auto i:sizes) { std::vector vec(i+1,0); } }int main() { srand(time(nullptr)); std::vector sizes; constexprint sizeOfSizes = 20000; for(int i=0; i

随机的将一个vector在0-sizeOfSizes的大小内resize sizeOfSizes次,和直接重新生成这么多次进行比较。打印两种操作的消耗时间进行对比。
3.实验结果
the before time 1591064487 the after time 1591064488 the before time 1591064488 the after time 1591064493

可以看出,resize的速度远比重新生成快。

    推荐阅读