… Виктор Сер и Sbi рекомендовали вместо этого использовать один вектор и получить элемент с помощью my_vector [x + y * 100 + z * 100 * 100].Почему это так?
Учитывая размеры, это логическая рекомендация , если размеры фиксированы .
Это из соображений производительности?Если да, то как это повышает производительность?
Рассмотрим:
- количество выделений, необходимое для создания всех массивов
- время для копирования даже одногоизмерение
- сложность, которую он добавляет к распределителю системы
- время, необходимое для освобождения
- сложность обычных операций, таких как заполнение
Редактировать: Эти причины все еще применяются, когда ширина / высота / глубина не совпадают и могут изменяться?
Изменение размера этого (массивного!) Массива может быть очень медленным.Вы должны понимать, как ваша программа будет работать, если вы хотите, чтобы она была самой быстрой.Сложность копирования и уничтожения элементов также учитывается (при использовании чего-то более сложного, чем int
).Если вы выполняете много операций изменения размера или вставки / удаления, то плоский вектор может быть очень медленным.
Однако, если его размеры фиксированы, вы можете сделать много лучше чем std::vector
.std::array
является одной альтернативой.(Если вы идете по маршруту std::array
, будьте осторожны с тем, что вы выделяете в стеке)