C ++ 11 Bereichsbasierte For-Loop-Effizienz "const auto & amp; i" versus "auto i"

In C++11, kann ich Durchlaufen einige container wie so:

for(auto i : vec){
   std::cout << i << std::endl;
}

Aber ich weiß, dass dies unnötig - unnötigda ich nur ab und zu drucken die Werte von vec - macht eine Kopie (BEARBEITEN: jedes element von) vecso dass ich stattdessen tun könnte:

for(auto &i : vec){
   std::cout << i << std::endl;
}

Aber ich möchte sicherstellen, dass die Werte der vec sind nie geändert und befolgen, const-correctness, so dass ich tun kann:

for(const auto &i : vec){
   std::cout << i << std::endl;
}

Also meine Frage ist: Wenn ich nur ab und zu Aussehen auf die Werte einiger container, würde nicht die Letzte Schleife (const auto &i) immer bevorzugt werden aufgrund der erhöhten effieciency, ohne ein extra-Kopie (BEARBEITEN: jedes element von) vec?

Ich habe ein Programm, das ich entwickle, in denen ich überlege mir diese änderung ganz, da der Wirkungsgrad entscheidend ist, es (der Grund, warum ich mit C++ in der Faust).

InformationsquelleAutor der Frage user2052561 | 2013-06-10

Schreibe einen Kommentar