因为一些原因,本人遇到需要频繁把vector与数组之间转换的情况,于是就分析了一下两个之间转换的实施以及相关的效率问题。
数组转换为vector
众所周知,一维vector中的元素存储是顺序连续的,所以我们可以通过访问第一个元素的地址以及元素的数量来访问一系列的元素。因此,我们可以采取如下操作来对vector进行访问和转换: 先创造一个数组
int array_size = 1000;
double **array = (double **)malloc(sizeof(double *) * array_size);
for (int i = 0; i
// 直接复制每一个值
for (int j = 0; j
vector t(array_size, vector(array_size));
for (int i = 0; i
vector tt(array_size, vector(array_size));
for (int i = 0; i
vector ttt(array_size, vector(array_size));
for (int i = 0; i
for (int j = 0; j
array1[i] = &v[i][0];
}
method2
double **array2 = (double **)malloc(sizeof(double *) * array_size);
// method2 直接复制每一个值
for (int i = 0; i
array2[i][j] = v[i][j];
}
}
method3
double **array = (double **)malloc(sizeof(double *) * array_size);
for (int i = 0; i
array1[i] = &v[i][0];
}
end = clock();
cost += (double)(end - begin) / CLOCKS_PER_SEC;
printf("method 1 cost: %lf secs\n", cost);
// method2
begin = clock();
double **array2 = (double **)malloc(sizeof(double *) * array_size);
for (int i = 0; i
array2[i][j] = v[i][j];
}
}
end = clock();
cost = (double)(end - begin) / CLOCKS_PER_SEC;
printf("method 2 cost: %lf secs\n", cost);
// method3
begin = clock();
double **array3 = (double **)malloc(sizeof(double *) * array_size);
for (int i = 0; i |