1.问题背景
在工作过程中遇到一个需要使用vector.resize(size),之后将vector中的数据统一重置为0的场景,然后想了一下,如果从一个比较小的内存区域resize到一个比较大的内存区域,就需要重新开一块内存空间,并且将原来空间的数据复制一遍,个人怀疑会不会直接用vector的构造函数来重新生成一块空间会比较好,上网搜了一下,都是讨论resize和reserve的,可能是这个问题太简单了,所以没人发到网上,所以我自己写了几行代码验证了一下。
2.代码验证
#include <iostream>
#include<memory>
#include <typeinfo>
#include<string>
#include <ctime>
#include <vector>
#include <cmath>
#include <cstdlib>
#include "base.h"
void printFunctionTime(void(*f)(const std::vector<int>&),const std::vector<int>& sizes)
{
printf("the before time %d\n",time(nullptr));
f(sizes);
printf("the after time %d\n",time(nullptr));
}
void testResize(const std::vector<int>& sizes)
{
std::vector<char> vec(1);
for(auto i:sizes)
{
vec.resize(i);
}
}
void testReG