c++ Vector似乎比C Array (Time)更快.为什么



你好,我已经看到了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数组。
另一个问题,为什么初始化会更快呢在这种情况下(或一般情况下)

最新更新