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 unsigned
zmienna wygląda dla mnie trochę przerażająco i wiem, że unsigned
zmienne mogą być niebezpieczne, jeśli nie zostaną właściwie użyte, więc - czy to prawda?
.size()
nie jest typu unsigned
aka unsigned int
. To rodzaj std::size_t
.
std::size_t
to typedef zdefiniowany przez wdrożenie. Zobacz standard. std::size_t
może być równoważne z unsigned
bieżącą implementacją, ale to nie jest istotne. Udawanie, że tak jest, może skutkować nieprzenośnym kodem i niezdefiniowanym zachowaniem.
std::size_t
w praktyce. Czy uważasz, że omawialiśmy już wszystko w tym szalonym strumieniu komentarzy przez 6 lat?