Welche ist effizienter und welche ist bequemer zu benutzen?Wird STL size() auf konstanter Komplexität oder Linear ausgeführt?
std::vector<int> V(Some Integers);
1)
for(int i=0 ; i<V.size() ; ++i){
std::cout<<V[i]<<" "; // print all integers
}
2)
int size=V.size();
for(int i=0 ; i<size ; ++i){
std::cout<<V[i]<<" "; // printing all integers
}
'std :: vector :: size()' ist 'O (1)' (konstante) Komplexität. Ich würde erwarten, dass (1) und (2) beim Release-Build nicht unterscheidbar sind; Ein Optimierer sollte 'size()' -Aufrufe aus der Schleife hissen können. –
Aber Standard sagt nur, dass es von O (1) Komplexität ist. Es kann einen gespeicherten Größenwert zurückgeben oder eine "end-begin" -Zeigerdifferenz berechnen. Und wenn Sie 'inline' ausschalten (wie in Debug-Builds), wird der erste Weg Funktionen aufrufen. Der zweite Weg ist zuverlässiger, um schnell zu sein. – ilotXXI
Ich würde vorschlagen 'für (const auto & elem: V)'. Es ist nicht nur garantiert, die "Endbedingung" nur einmal zu bewerten. Es ist auch viel einfacher zu lesen. –