C ++ 11 vector <bool>性能问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (89)

我注意到,在运行以下代码时,向量要比bool数组慢得多。

int main() 
{
    int count = 0;
    int n = 1500000;
    // slower with c++ vector<bool>
    /*vector<bool> isPrime;
    isPrime.reserve(n);
    isPrime.assign(n, true);
    */
    // faster with bool array 
    bool* isPrime = new bool[n];

    for (int i = 0; i < n; ++i)
        isPrime[i] = true;


    for (int i = 2; i< n; ++i) {
        if (isPrime[i])
            count++;
        for (int j =2; i*j < n; ++j )
            isPrime[i*j] = false;
    }

    cout <<  count << endl;
    return 0;
}
提问于
用户回答回答于

std::vector<bool>可能会有各种性能问题。

一般而言,可以:

但对于速度优化,你必须测试...

用户回答回答于

vector<bool>可能具有模板专业化,并且可以使用位阵列来实现以节省空间。提取并保存一点并将其从/转换为bool可能导致观察到的性能下降。如果使用std::vector::push_back,将导致更糟糕的表现。下一个表现可能是assign

另一方面,bool []保证是数组bool

你应该调整为n,而不是n-1为了避免不确定的行为。

扫码关注云+社区

领取腾讯云代金券