【发布时间】:2016-08-24 06:44:56
【问题描述】:
我注意到在运行以下代码时,vector 比 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;
}
有什么方法可以让vector<bool> 更快吗?顺便说一句,std::vector::push_back 和 std::vector::emplace_back 都比 std::vector::assign 慢。
【问题讨论】:
-
你正在访问
isPrime,它应该是new bool[n] -
如果您非常关心性能,请不要使用
vector<bool>。标准要求它非常节省空间,但这会带来性能成本。 -
您所说的减速有多大?您可能需要添加一些时间示例,以使这个问题更具吸引力。
-
您是否在启用优化的情况下进行编译?
标签: c++ performance c++11 vector bitvector