有没有一种简单的方法来分配结构数组
Is there an easy way to assign a struct array
我有一个结构数组,如下所示:
struct VERTEX_FMT
{
float x, y, z, u, v;
const static DWORD FVF = (D3DFVF_XYZ | D3DFVF_TEX1);
};
VERTEX_FMT vertices[] = {
{-1.0f, -1.0f, 0.0f, 0.0f, 0.0f},
{-1.0f, 1.0f, 0.0f, 0.0f, 1.0f},
{ 1.0f, -1.0f, 0.0f, 1.0f, 0.0f},
{ 1.0f, 1.0f, 0.0f, 1.0f, 1.0f},
};
在C++中,有没有一种简单的方法可以为结构数组分配一个新值。
仅当您将数组包装在另一个struct
中时。数组在C中是相当破碎的,C++认为std::vector
就足够了,任何修复C风格数组的尝试要么都不足以产生影响,要么会破坏兼容性,以至于无法再谈论C风格数组。
对于像您这样的POD阵列,memcpy
是迄今为止最简单的解决方案。对于更复杂的情况,甚至是像您这样的struct
数组的大多数情况,您可能应该考虑使用std::vector
。或者混合使用:将C风格的数组用于静态的初始化数组,例如您显示的数组,这样编译器就会为您计算元素的数量,但将std::vector
用于定义中未完全初始化或是赋值目标的任何数组。使用std::vector
的两个迭代器构造函数可以很容易地从C风格的数组构造std::vector
,因此同时使用这两种类型不会带来任何不便。
如果您的意思是插入一个新值,那么否-数组是固定大小的-您无法轻松更改它。您必须创建一个全新的阵列——您真正应该做的是查看std::vector
std::vector<VERTEX_FMT> new_array(vertices, vertices + sizeof(vertices)/sizeof(VERTEX_FMT));
// add the new entry in
new_array.push_back(...);
编辑:根据评论,你想做的似乎是:
vertices[2] = {....}; // new values.
在当前标准中,最快速的方法是使用std::memcpy
或std::copy
,类似于:
VERTEX_FMT nv = { ... };
// copy this in
std::memcpy(&vertices[2], &nv, sizeof(nv));
// the line below also works if you want to use purely standard algorithms.
//std::copy(&nv, (&nv) + 1, &vertices[2]);
您可以使用std::generate或其他一些stl算法函数。
如前所述,在当前版本的c++中没有其他方法可以做到这一点(在c++0x中是可能的)
在当前标准中,您不能执行
int a[3] = {1,2,3};
a[] = {4,5,6};
但使用指向数组类型的指针,您肯定可以获得它的效果
int a[3] = {1,2,3}, (*p)[3]; // <-- this syntax forces p to point only int[3]
p = &a;
int b[3] = {4,5,6,};
p = &b;
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- GlobalAlloc而不是其他分配方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 使 std::vector 分配对齐内存的现代方法
- 使用同一类中的方法重新分配字段时出现问题
- 工厂方法:分配和strcpy_s的差异
- 在类中分配具有方法值的变量
- 删除类成员的动态分配内存的最佳方法是什么
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- const_cast const 方法中的"this"将"this"分配给外部变量?
- 使用类中的方法作为运算符将值分配给类的私有成员
- 释放分配给大量矢量的内存的最有效方法是什么?
- COM / DCOM:服务器存根不会为现有接口中的新方法分配内存
- 如何将 ifstream&return from 方法分配给变量?
- 这感觉有点反模式,有没有更好的方法(C++ - 分配给引用)
- 如何在Java端释放本机方法分配的内存
- 跟踪GPU内存泄漏的专业方法(分配而不释放)
- free()方法分配的内存安全吗?