Мне нужно иметь массив элементов фиксированного размера и вызывать функции, которые требуют знать, как они помещаются в память, в частности:
-
функции, такие как
glVertexPointer
, должны знать, где находятся вершины, насколько они отдалены друг от друга и т.д. В моем случае вершины будут членами сохраняемых элементов. -
чтобы получить индекс элемента внутри этого массива, я бы предпочел избегать наличия поля
index
внутри моих элементов, но скорее играл бы с арифметикой указателей (т.е. индексElement *x
будетx - & array[0]
) - Кстати, это звучит грязно для меня: это хорошая практика или я должен делать что-то еще?
Можно ли использовать std::vector
для этого?
Что-то заставляет меня думать, что std::array
будет более подходящим, но:
-
Конструктор и деструктор для моей структуры будут редко вызываться: я не возражаю против таких накладных расходов.
-
Я собираюсь установить размер
std::vector
для размера, который мне нужен (размер, который будет использоваться дляstd::array
, поэтому не будет наноситься накладных расходов из-за спорадического перераспределения. -
Я не против небольшого накладного расхода для внутренней структуры
std::vector
. -
Я мог бы использовать возможность изменять размер вектора (или лучше: иметь размер, выбранный во время установки), и я думаю, что нет никакого способа сделать это с помощью std:: array, так как его размер является параметром шаблона (это слишком плохо: я мог бы это сделать даже со старым C-подобным массивом, просто динамически распределяя его по куче).
Если std::vector
отлично подходит для моих целей, я хотел бы узнать подробности, если у него будут некоторые служебные данные времени выполнения по отношению к std::array
(или к простому массиву C):
Я знаю, что он вызовет конструктор по умолчанию для любого элемента, когда я увеличу его размер (но, я думаю, это ничего не будет стоить, если мои данные имеют пустой конструктор по умолчанию?), то же самое для деструктора. Что-нибудь еще?