小编Qin*_*ang的帖子

vector <bool>与数组之间的性能差距

我试图解决C ++中的编码问题,问题计算素数的数量小于非负数的数量n

所以我首先想出了一些代码:

int countPrimes(int n) {
    vector<bool> flag(n+1,1);
    for(int i =2;i<n;i++)
    {
        if(flag[i]==1)
            for(long j=i;i*j<n;j++)
                flag[i*j]=0;
    }
    int result=0;
    for(int i =2;i<n;i++)
        result+=flag[i];
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这需要88毫秒,并使用8.6 MB的内存。然后,我将代码更改为:

int countPrimes(int n) {
    // vector<bool> flag(n+1,1);
    bool flag[n+1] ;
    fill(flag,flag+n+1,true);
    for(int i =2;i<n;i++)
    {
        if(flag[i]==1)
            for(long j=i;i*j<n;j++)
                flag[i*j]=0;
    }
    int result=0;
    for(int i =2;i<n;i++)
        result+=flag[i];
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这需要28毫秒和9.9 MB。我真的不明白为什么在运行时间和内存消耗上都存在这样的性能差距。我已阅读相类似的问题这一个那一个,但我仍然困惑。

编辑:我的运行时间与11.5 MB的存储器替换之后减少至40毫秒vector<bool>vector<char>

c++ arrays performance vector std

30
推荐指数
3
解决办法
2438
查看次数

标签 统计

arrays ×1

c++ ×1

performance ×1

std ×1

vector ×1