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