Dire, ho unVelocità di accesso a std :: vector da iteratore vs operatore []/indice?
std::vector<SomeClass *> v;
nel mio codice e ho bisogno di accedere ai suoi elementi molto spesso nel programma, li loop in avanti e indietro.
Qual è il tipo di accesso più veloce tra questi due?
accesso Iterator:
std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;
// i loops forward, j loops backward
for(i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++){
// some operations on v items
}
accesso Pedice (in base all'indice)
std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();
// i loops forward, j loops backward
for(i = 0, j = size - 1; i < size && j >= 0; i++, j--){
// some operations on v items
}
E, fa const_iterator offrire un modo più veloce per accedere agli elementi vettoriali in caso io non devo modificarli?
Che cosa hanno mostrato i risultati del profiler? –
Se avessi tempo e voglia di profilare il codice che non avrei chiesto qui. Mi chiedo solo se le implementazioni iterator stl hanno una sorta di ottimizzazione degli accessi. –
Considera l'uso di 'boost :: ptr_vector' se il vettore possiede gli oggetti. Altrimenti usa 'boost :: reference_wrapper'. –