Как правильно перебирать вектор в C ++?
Рассмотрим эти два фрагмента кода, этот работает нормально:
for (unsigned i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
и этот:
for (int i=0; i < polygon.size(); i++) {
sum += polygon[i];
}
который генерирует warning: comparison between signed and unsigned integer expressions.
Я новичок в мире C ++, поэтому unsignedпеременная выглядит немного пугающей для меня, и я знаю, что unsignedпеременные могут быть опасными, если их не использовать правильно, так - это правильно?
.size()не относится к типу unsignedака unsigned int. Это типа std::size_t.
std::size_t- это определение типа, определяемое _implementation. Смотрите стандарт. std::size_tможет быть эквивалентно unsignedв вашей текущей реализации, но это не имеет значения. Притворство может привести к непереносимому коду и неопределенному поведению.
std::size_tна практике. Как вы думаете, мы уже охватили все это в этом бессвязном потоке комментариев за 6 лет?