Чтобы добавить к другим ответам, есть одно фундаментальное отличие, которое стоит отметить, и то, как оно хранится в памяти. Это может существенно повлиять на производительность массивов. Структуры являются типами значений, поэтому они хранят значение в области памяти, на которую они указывают, классы являются ссылочными типами, поэтому они ссылаются на класс в области памяти, на которую они указывают, фактическое значение хранится в другом месте.
- Со структурой память выделяется внутри содержащего класса для хранения данных.
- С классом содержащий класс просто будет содержать указатель на новый класс в другой области памяти.
Это также верно для массивов, поэтому массив структур в памяти выглядит следующим образом
[struct][struct][struct][struct][struct][struct][struct][struct]
Где как массив классов выглядит так
[pointer][pointer][pointer][pointer][pointer][pointer][pointer][pointer]
Фактические значения, которые вас интересуют, хранятся не в массиве, а в другом месте в памяти.
Для подавляющего большинства приложений это различие на самом деле не имеет значения, однако в высокопроизводительном коде это повлияет на локальность данных в памяти и окажет большое влияние на производительность кэша ЦП. Использование классов, когда вы могли / должны были использовать структуры, значительно увеличит количество кеш-пропусков в процессоре.
Самым медленным, что делает современный ЦП, является не обработка чисел, а выборка данных из памяти, а попадание в кэш L1 во много раз быстрее, чем чтение данных из ОЗУ.