Безопасно ли копировать память вектора?
Да, вектор здесь не делает ничего особенного, и элементы будут упакованы так же, как и для массива , Это легко увидеть, потому что, скажем, data()
возвращает указатель, доступ к которому можно получить как массив (от [0]
до [myvec.size() - 1]
) до тех пор, пока не будет выполнена операция, которая делает недействительным этот возврат (например, уничтожение или изменение размера вектора).
Я хочу, чтобы поплавки были плотно упакованы (поскольку они будут отправлены в графический процессор), позволяет ли это мне это сделать?
По сути, это означает, что тип, который вы храните в векторе , соответствует требованиям. (например, что вам на самом деле нужен формат RGB с 3-мя числами, а не один из целочисленных форматов или 4-элементный формат RGBA или RGBX). В зависимости от используемого вами API, вы, возможно, даже можете передать ему векторные данные напрямую, без копирования в отдельный массив (например, ID3D11Device::CreateBuffer
занимает pInitialData
, и если вы сохраняете правильный тип в векторе , вы можете просто установить pSysMem
на myvector.data()
).