Jaki jest prawidłowy sposób iteracji po wektorze w C ++?
Rozważ te dwa fragmenty kodu, ten działa dobrze:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
i ten:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
który generuje warning: comparison between signed and unsigned integer expressions.
Jestem nowy w świecie C ++, więc unsignedzmienna wygląda dla mnie trochę przerażająco i wiem, że unsignedzmienne mogą być niebezpieczne, jeśli nie zostaną właściwie użyte, więc - czy to prawda?
.size()nie jest typu unsignedaka unsigned int. To rodzaj std::size_t.
std::size_tto typedef zdefiniowany przez wdrożenie. Zobacz standard. std::size_tmoże być równoważne z unsignedbieżącą implementacją, ale to nie jest istotne. Udawanie, że tak jest, może skutkować nieprzenośnym kodem i niezdefiniowanym zachowaniem.
std::size_tw praktyce. Czy uważasz, że omawialiśmy już wszystko w tym szalonym strumieniu komentarzy przez 6 lat?