我可以安全地复制矢量<array>吗?
Can I safely copy vector<array>?
我有一个vector<array<float,3>>
用作渲染的 3D 坐标列表。
我可以简单地使用带有sizeof(array<float,3>) * vector.size()
的memcpy作为count
参数吗? 矢量的记忆可以安全复制吗?
€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
pSysMem
只是一个void*
,结构有一个额外的大小参数,我将其设置为sizeof(array<float,3>) * vector.size()
矢量的内存可以安全复制吗?
是的,向量在这里不做任何特别的事情,元素的打包方式与数组相同。你可以很容易地看到这一点,因为假设data()
返回一个指针,该指针可以作为数组访问(最多[0]
[myvec.size() - 1]
(,直到执行使该返回无效的操作(例如销毁或调整向量的大小(。
我希望浮标紧密包装(因为它们将被发送到 GPU(,这是否允许我这样做?
因此,这基本上意味着确保您存储在载体中的类型符合要求。(例如,您实际上想要 3 浮点 RGB 格式,而不是整数格式或 RGBA 或 RGBX 4 元素格式之一(。根据您使用的 API,您甚至可以直接为其提供矢量数据,而无需复制到单独的数组(例如ID3D11Device::CreateBuffer
需要pInitialData
,如果您在向量中存储正确的类型,则可以将pSysMem
设置为myvector.data()
(。
array<float,3>
是微不足道的可复制的,vector.data()
是一个连续的块,是的,memcpy
是安全的,但我认为这是不好的做法,我希望你有一个很好的理由不传递指针,复制向量而不是原始数据或使用std::copy
。
要检查类型是否易于复制,您可以使用 std::is_trivially_copyable
您可以使用std::array<float, 3> *
,例如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
- EASTL矢量<向量<int>>连续的
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 将 **float array 从 C++ Dll 传递给 python
- std::bind on statd::array 的运算符 []
- 检查输入 std::array 指针数据是否等于某个常量数组
- 我可以安全地复制矢量<array>吗?
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- 如何读/写或遍历 std::array 中的特定元素范围?
- 通过 host() 从 af::array 检索数据会导致错误的数据
- 是否可以使用 std::array 作为 POD 结构的数据容器?