我注意到在運行以下代碼時,矢量比bool數組慢得多。C++ 11矢量<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'。該標準要求非常節省空間,並且具有性能成本。 –
你在談論減速有多大?您可能想要添加一些時間示例以使此問題更具吸引力。 – anderas