C++每帧更新和复制一系列值.我应该使用哪种类类型
C++. Updating and copying a series of values each frame. Which class type should I use?
我在每帧生成一个值集合,我想将这些值添加到特定索引处的一个更大的值集合中。
这是我正在生成的集合的典型示例
std::vector<glm::vec3> corners;
corners.reserve(8);
//glm::vec3 corners[8];
//std::list<glm::vec3> corners;
corners[i++] = position - hX + hY + hZ;
corners[i++] = position + hX + hY + hZ;
corners[i++] = position + hX - hY + hZ;
corners[i++] = position - hX - hY + hZ;
corners[i++] = position - hX + hY - hZ;
corners[i++] = position + hX + hY - hZ;
corners[i++] = position + hX - hY - hZ;
corners[i++] = position - hX - hY - hZ;
然后,我有一个更大的glm::vec3值集合,我想将上面的值复制到特定索引中。
std::vector<glm::vec3> vertices;
vertices.assign(maxVertices, 0);
C#的等价物是
corners.CopyTo(vertices, index);
我可以使用什么类类型来有效地生成较小的集合并将其复制到较大的集合,而不会在每帧生成它时产生太多开销?
我可以将每个新生成的较小集合分配到较大集合的末尾,这样索引值就可以被忽略。
在代码中应该是corners.resize(8)
,而不是corners.reserve(8)
。此外,如果我理解正确的话,你似乎总是有8个角?然后使用数组:
typedef std::array<glm::vec3, 8> Corners;
// or in pre-c++0B code use boost::array same way
// or if neither is available then just raw glm::vec3[8] can do.
然后可以通过初始化完成填充:
// somehow we have position, hX, hY and hZ
Corners corners =
{
position - hX + hY + hZ,
position + hX + hY + hZ,
position + hX - hY + hZ,
position - hX - hY + hZ,
position - hX + hY - hZ,
position + hX + hY - hZ,
position + hX - hY - hZ,
position - hX - hY - hZ
};
可以使用标准副本进行复制:
std::vector<glm::vec3> vertices;
// somehow it gets filled
// somewhere comes index
std::copy( corners.begin(), corners.end(), vertices.begin() + index );
// with raw glm::vec3[8] std::copy( corners, corners + 8, vertices.begin() + index );
如果需要插入而不是复制,请使用顶点.insert()
您可以使用vector::insert
。如果要在矢量vertices
中index
位置之前插入corners
中的值,您可以执行以下操作:
vertices.insert(vertices.begin() + index, corners.begin(), corners.end());
然而,该操作需要为新的值腾出空间。这将把所有元素从index
移到向量的末尾(也许还需要调整向量大小)。
为了避免这种情况,您可以使用list
。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 我应该将哪种有效负载类型发送给webrtc::P ayloadRouter的构造函数?
- 如果创建支持返回可变参数类型列表的通用模板 API,我应该使用 std::tuple 还是其他东西?
- 我应该为C 中的每种类型都有一个解析器
- 我应该如何设计一种单型类型
- 我应该对通用二叉搜索树中的根使用哪种类型的指针
- 与基本面作斗争.特别是字符[],字符*和从数组中读取.也许我应该使用类型字符串
- 我将类型库(.tlb)导入到Delphi中,但函数参数似乎不正确.我应该如何解决它
- 我应该使用 C 类型 (uint8_t/../uint64_t) 或 (u_int8_t/../u_int64_t)
- 在磁盘上写作时,我应该使用最小的类型
- C ,代码::块,我应该在Windows和MacOS中选择哪种项目类型
- 我应该在简单的访问成员函数中使用 const 返回类型吗?
- 我应该始终将适当的文字用于数字类型
- C - 我应该接受哪种类型的参数?(我们什么时候应该铸造?)
- 如果要为变量分配500*(1.00013358^3),我应该使用什么类型
- 我应该在这里使用什么类型的石膏
- 创建 Timer 类时,我应该使用什么数据类型来保存值?(C/C++)
- C++未知变量类型.我应该使用模板吗