你好,我已经看到了c++向量vs数组(时间)。在我的mac上,矢量需要时间来定义,但在比较后给出胜利者的矢量。它是如何工作的?我说int[]比动态向量快?
#include <iostream>
#include <vector>
using namespace std;
#define N (100000000)
//int sd[N];
int main() {
clock_t start;
double temps;
static int sd[N];
start = clock();
for (unsigned long i=0 ; i < N ; i++){
if(sd[i]==3)
;
}
temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
printf("Time: %f msn",temps);
vector<int>vd(N);
start = clock();
for (unsigned long i=0 ; i < N ; i++){
if(vd[i]==3)
;
}
temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
printf("Time: %f msn",temps);
while (1)
;
return 0;
}
我有这些结果:
- 时间:422.87400 ms
- 时间:300.84700 ms
即使以vector开头,vector似乎也比c array快。
谢谢你的解释。
另一个问题:在xcode中,为什么我看到由声明向量和静态c数组使用的内存,我必须像代码中那样去所有的内存单元格(for…如果(sd[我]…)
谢谢您的解释
我已经注意到,如果我初始化所有c数组单元格为0(例如或6…),c数组将更快或等于向量。
int main() {
clock_t start;
double temps;
static int sd[N];
for (unsigned long i=0 ; i < N ; i++){
sd[i]=0;
}
start = clock();
//puts("initialized");
for (unsigned long i=0 ; i < N ; i++){
if(sd[i]==3)
;
}
temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
printf("Time: %f msn",temps);
//puts("initialized");
vector<int>vd(N);
start = clock();
for (unsigned long i=0 ; i < N ; i++){
if(vd[i]==3)
;
}
temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
printf("Time: %f msn",temps);
while (1)
;
return 0;
}
我将看到在xcode中使用的内存与初始化在0的所有细胞c数组。
另一个问题,为什么初始化会更快呢在这种情况下(或一般情况下)