Який правильний спосіб ітерації над вектором в 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 років?