Який правильний спосіб ітерації над вектором в 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- тип, визначений імплементацією. Див. Стандарт. std::size_tможе бути еквівалентним unsignedу вашій поточній реалізації, але це не актуально. Прикидаючи це, це може призвести до непереносного коду та не визначеної поведінки.
std::size_tна практиці. Ви думаєте, що ми висвітлювали все ще в цьому бурхливому потоці коментарів за 6 років?