Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种简单的方法来分配结构数组_C++_Struct - Fatal编程技术网

C++ 有没有一种简单的方法来分配结构数组

C++ 有没有一种简单的方法来分配结构数组,c++,struct,C++,Struct,我有这样一个结构数组: 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,

我有这样一个结构数组:

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++中的新值?

如果你是指插入一个新的值,那么数组是固定大小的,你不能轻易地改变它。您必须创建一个全新的数组-您真正应该做的是查看
std::vector

std::vector<VERTEX_FMT> new_array(vertices, vertices + sizeof(vertices)/sizeof(VERTEX_FMT));
// add the new entry in
new_array.push_back(...);
在当前标准中,最快的方法是使用
std::memcpy
std::copy
,类似于:

vertices[2] = {....}; // new values.
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]);

仅当您将数组包装到另一个
结构中时。数组在C中是很破的,C++决定了<代码> STD::vector < /C> >是足够的,并且任何尝试修复C样式数组的方法都不会有太大的差别,或者会打破兼容性,直到你不能再谈论C样式数组。
对于像您这样的POD阵列,
memcpy
是迄今为止最简单的解决方案。对于更复杂的情况,甚至大多数代码的数组< >结构> <代码> s,像你一样,你应该考虑使用<代码> STD::vector < /Cord>。或者混合使用:对于静态的、初始化的数组(如您显示的数组),使用C样式的数组,这样编译器将为您计算元素的数量,但对于定义中未完全初始化的或赋值的目标,则使用
std::vector
。使用
std::vector
的两个迭代器构造函数从C样式的数组构造
std::vector
很容易,因此使用这两种类型不会带来任何实际的不便。

您可以使用,或其他一些stl算法函数


正如已经说过的,在当前版本的C++中,没有其他的方法可以做到(在C++ 0x中)

在当前的标准中,你<强>不能< /St>>Do,

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;

inta[3]={1,2,3},(*p)[3];//在C++03中没有,它继承了C将数组视为该语言第三类公民的方式。然而,C++11将带来统一的初始化语法,这应该会有所帮助。也许我误导了你,我的意思是保持大小,只是从整体上改变它的值。谢谢,我意识到
std::vector
比C数组强大得多,这里使用C数组的原因是我必须使用
memcpy
将整个内存复制到某个地方。我想知道是否有一些技巧可以改变这些值。顺便说一句,什么是豆荚阵列?@Nickolas豆荚阵列是豆荚类型的阵列。粗略地说,C中可能存在的类型(并且是
memcpy
able)。关于
std::vector
,如果实例化类型是一个POD,您可以
memcpy
使用类似
memcpy(&v[0],dest,v.size()*sizeof(v[0]))的东西来创建它。只要事先确保它不是空的。