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的内存可以安全复制吗
是的,向量在这里没有任何特殊作用,元素的压缩方式与数组相同。您可以很容易地看到这一点,因为saydata()
返回的指针可以作为数组访问(对于[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()
:)