C++ 我可以安全地复制vector吗<;数组>;?

C++ 我可以安全地复制vector吗<;数组>;?,c++,arrays,vector,memcpy,C++,Arrays,Vector,Memcpy,我有一个向量用作渲染的三维坐标列表。 我可以简单地使用memcpy和sizeof(array)*vector.size()作为count参数吗? vector的内存可以安全复制吗 欧元dit:以下是我的代码片段。 我的问题现在措辞有点不正确 vector<array<float,3>> vertexPositions; //read VertexPositions, one line represents a vertex position and put them in

我有一个
向量
用作渲染的三维坐标列表。
我可以简单地使用memcpy和
sizeof(array)*vector.size()
作为
count
参数吗? vector的内存可以安全复制吗

欧元dit:以下是我的代码片段。 我的问题现在措辞有点不正确

vector<array<float,3>> vertexPositions;
//read VertexPositions, one line represents a vertex position and put them into vertexPositions with push_back();

D3D11_BUFFER_DESC bufferDesc;
//initialize Buffer Description;

D3D11_SUBRESOURCE_DATA bufferInitialData;
bufferInitialData.pSysMem = vertexPositions.data(); //pSysMem is a void* and expects a sequence of floats
vectorvertexpositions;
//读取VertexPositions,一行表示顶点位置,并使用push_back()将它们放入VertexPositions中;
D3D11_BUFFER_DESC bufferDesc;
//初始化缓冲区描述;
D3D11_子资源_数据缓冲初始化数据;
bufferInitialData.psysem=vertexPositions.data()//psysem是一个void*,需要一系列的浮动
“代码> > PysMsM<代码>是一个额外的大小参数,我设置为“代码> SigeOf(数组)*Vector .sig())/>代码>

<代码>数组是可复制的,<代码> vector。DATA()/代码>是一个连续的块,是的,对于<代码> MyCPY是安全的,但我认为这是一个坏习惯,我希望您有充分的理由不传递指针、复制向量而不是原始数据或使用
std::copy

要检查类型是否可以复制,可以使用

vector的内存可以安全复制吗

是的,向量在这里没有任何特殊作用,元素的压缩方式与数组相同。您可以很容易地看到这一点,因为say
data()
返回的指针可以作为数组访问(对于
[0]
直到
[myvec.size()-1]
),直到执行使该返回无效的操作(例如销毁或调整向量大小)


我希望浮动被紧密地打包(因为它们将被发送到GPU),这允许我这样做吗


因此,这基本上意味着确保存储在向量中的类型满足要求。(例如,您实际需要的是3浮点RGB格式,而不是整数格式或RGBA或RGBX 4元素格式)。根据您使用的API,您甚至可以直接将向量数据提供给它,而无需复制到单独的数组(例如,获取
pInitialData
,如果您在向量中存储了正确的类型,您只需将
psysem
设置为
myvector.data()
).

您可以使用
std::array*
作为
float[][3]
的开头。你没有一个是从向量的地址得到的

std::vector<std::array<float,3>> vertexPositions;
//read VertexPositions, one line represents a vertex position and put them into vertexPositions with push_back();

D3D11_BUFFER_DESC bufferDesc;
//initialize Buffer Description;

D3D11_SUBRESOURCE_DATA bufferInitialData;
bufferInitialData.pSysMem = static_cast<void *>(vertexPositions.data()); //pSysMem is a void* and expects a sequence of floats
std::vector-vertextions;
//读取VertexPositions,一行表示顶点位置,并使用push_back()将它们放入VertexPositions中;
D3D11_BUFFER_DESC bufferDesc;
//初始化缓冲区描述;
D3D11_子资源_数据缓冲初始化数据;
bufferInitialData.psysem=静态_cast(vertexPositions.data())//psysem是一个void*,需要一系列的浮动

< /代码>如果你使用C++,不要使用<代码> MeMCPY < /C>代码>标准::向量
有自己的副本。请张贴您的代码的最小示例我希望浮动被紧密打包(因为它们将被发送到GPU),这允许我这样做吗?请澄清您希望在哪里复制数据。我怀疑您想将向量的数据复制到c样式数组中用作缓冲区或类似的东西。我添加了示例代码非常感谢,这为我澄清了问题:)我也注意到了这一点,并编辑了我的问题,使其使用
.data()
:)