mrjbom
@mrjbom

Что использовать, size_t или int в цикле for?

Все используют int в подсчёте итераций цикла, а сейчас прочёл о том что это делает программу несовместимой с x64 архитектурой при обработке больших массивов и что лучше использовать size_t. Это верно?
  • Вопрос задан
  • 3738 просмотров
Пригласить эксперта
Ответы на вопрос 3
longclaps
@longclaps
У вас большие массивы? Очень-очень?
Не забивайте себе голову фигнёй. Int - это нормально.
Ответ написан
Комментировать
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Используйте решения в следующем приоритете:
1. готовый stl algorithm (например std::find, std::remove_if,...)
2. range based for "for (const auto& elem : myArray)"
3. for (auto iter = myArray.begin()...
4. int
5. size_t

Основная проблема с int -- раздражающий варнинг про сравнение знаковых и беззнаковых типов в
i < array.size(). Немного поможет std::ssize из C++20, который возвращает int. Массивы размера больше чем int встречаются слишком редко чтобы выбирать решение по умолчанию основываясь на них.

Беззнаковые типы приводят к куче ошибок связаных с отрицательными числами. В идеале их нужно использовать только там где нужны контролируемые переполнения (операции по модулю 2^{32,64}). Простой пример где можно выстрелить себе в ногу это цикл от 10 до 0.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Выбирайте тот тип данных, который вам действительно нужен.
Если у вас в цикле пара миллионов итераций максимум - то зачем вам 64-битное целое?
Если же вам действительно мало 32-битного числа - то вы не можете использовать ни int ни size_t для этих целей, вы должны использовать именно 64-битное целое независимое от платформы.
А если у вас пара десятков итераций в прыжке - то вам и int слишком большой, возьмите что-нибудь поменьше.

Разным задачам нужны разные типы данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы