In C++ 11, kann ich einige Container wie so iterieren:C++ 11 bereichsbasierte for-Schleife Effizienz "const Auto & i" im Gegensatz zu "auto i"
for(auto i : vec){
std::cout << i << std::endl;
}
Aber ich weiß, dass dies unnötig - unnötig, da ich nur die Werte von vec
-drucken müssen - macht eine Kopie (EDIT: jedes Element) vec
, so stattdessen konnte ich tun:
for(auto &i : vec){
std::cout << i << std::endl;
}
Aber ich möchte sicherstellen, dass die Werte von vec
durch const-Korrektheit nie geändert und bleiben, so kann ich tun:
for(const auto &i : vec){
std::cout << i << std::endl;
}
Also meine Frage ist: Wenn ich nur zu Blick auf die Notwendigkeit Werte von einigen Behältern, würde nicht die allerletzte Schleife (const auto &i
) immer wegen der erhöhten Effizienz bevorzugt werden, keine zusätzliche Kopie von (: jedes Element von) vec
zu haben?
Ich habe ein Programm, das ich entwickle, in dem ich darüber nachdenke, diese Änderung durchgängig zu machen, da Effizienz entscheidend ist (der Grund, warum ich C++ an erster Stelle benutze).
Ja, wenn Sie nur Lesezugriff auf ein Argument benötigen, sollte es durch 'auto const &' erfolgen, um eine unnötige Kopie zu vermeiden. – 0x499602D2
Das "const" -Schlüsselwort macht Ihren Code nicht schneller, obwohl ... – Tim
'für (auto i: vec)' keine zusätzliche Kopie des gesamten 'vec' erstellt, es kopiert jedes Element von' vec' in "ich". – Casey