Ho notato che il vettore è molto più lento dell'array bool quando esegue il codice seguente.C++ 11 vector <bool> problema di prestazioni (con esempio di codice)
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;
}
C'è qualche modo che io possa fare per rendere vector<bool>
più veloce? Btw, entrambi std::vector::push_back
e std::vector::emplace_back
sono anche più lenti di std::vector::assign
.
si accede a 'isPrime' oltre la sua fine, dovrebbe essere' new bool [n] ' –
Non utilizzare' vector 'se si è super-preoccupati per le prestazioni. È richiesto dallo standard di essere molto efficiente nello spazio e questo ha un costo di prestazioni. –
Di quale rallentamento parli? Potresti voler aggiungere alcuni esempi di tempistiche per rendere questa domanda più attraente. – anderas