In C++ 11, posso iterare su alcuni container in questo modo:C++ 11 efficienza per-loop "auto const & i" contro "auto i"
for(auto i : vec){
std::cout << i << std::endl;
}
Ma so che questo inutilmente - inutilmente, dal momento che ho solo bisogno di stampa i valori della vec
- crea una copia del (EDIT: ogni elemento di) vec
, così invece ho potuto fare:
for(auto &i : vec){
std::cout << i << std::endl;
}
ma voglio fare in modo che i valori di vec
non vengono mai modificati e rispettare const correttezza, così posso fare:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Quindi la mia domanda è: Se solo ho bisogno di sguardo al valori di alcuni contenitori, non sarebbe sempre preferibile l'ultimo ciclo (const auto &i
) a causa della maggiore efficienza di non avere una copia aggiuntiva di (EDIT: ogni elemento di) vec
?
Ho un programma che sto sviluppando in cui sto pensando di apportare questo cambiamento, poiché l'efficienza è fondamentale in esso (il motivo per cui sto usando C++ nel primo posto).
Sì, se è necessario solo l'accesso in lettura a un argomento, è necessario utilizzare 'auto const &' per evitare una copia non necessaria. – 0x499602D2
La parola chiave "const" non sta rendendo il tuo codice più veloce anche se ... – Tim
'for (auto i: vec)' non crea una copia extra dell'intero 'vec', copia ogni _element_ di' vec' in 'i'. – Casey