Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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+中的数组和覆盖+;-我可以重复使用同一个对象吗?_C++_Arrays_Memory_Struct_Overwrite - Fatal编程技术网

C++ C+中的数组和覆盖+;-我可以重复使用同一个对象吗?

C++ C+中的数组和覆盖+;-我可以重复使用同一个对象吗?,c++,arrays,memory,struct,overwrite,C++,Arrays,Memory,Struct,Overwrite,我正在制作一个向量数组以保存为法线。因为我们还没有学会如何在课堂上做向量,所以我制作了一个同样有用的结构: struct vector3 { double xcoord; double ycoord; double zcoord; }; 然后,在我的函数开始时,我有: vector3 vector; vector3* normalField = new vector3[x]; 当函数循环通过时,在每个循环中,它将新值应用于“vector”——在函数末尾,它将数组的一部

我正在制作一个向量数组以保存为法线。因为我们还没有学会如何在课堂上做向量,所以我制作了一个同样有用的结构:

struct vector3
{
    double xcoord;
    double ycoord;
    double zcoord;
};
然后,在我的函数开始时,我有:

vector3 vector;
vector3* normalField = new vector3[x];
当函数循环通过时,在每个循环中,它将新值应用于“vector”——在函数末尾,它将数组的一部分设置为vector

normalField[x] = vector;
这个想法是通过不创建一大堆新向量来节省内存,因为我不知道何时何地可以对这组向量使用delete函数。这样行吗?还是不?最好的方法是什么


整个代码非常冗长——我正在编写一个算法,为程序生成的地形创建一个法线场。我不使用内置的vector类,因为出于某些愚蠢的原因,我们不应该使用它。我责备教授

赋值normalField[x]=vector将深度复制vector中的数据;您将创建与normalField[]中的元素数量相同的向量


<>记住,C++和结构类之间的唯一区别是,在结构中数据成员和函数默认为公共的,但在类中它们默认为私有的。

< P>赋值常态字段[x] =向量将在向量中深度复制数据;您将创建与normalField[]中的元素数量相同的向量


请记住,在C++中,结构和类之间的唯一区别是,在结构中,数据成员和函数默认为公共的,但在类中它们默认为私有的。

< p>可以通过数组实现,并且当需要向量时,创建一个新的更大的数组。(基本上是复制std::vector的行为),或使用链表,如下所示:

struct vector3List {
     vector3 v;
     vector3List * next;
};
当然,存在更精确的解决方案,但选择取决于您需要对向量做什么

如果您不确定列表是如何使用的,以下是一个示例:

vector3List * listBegin = new vector3List();
// Setup your vector
listBegin->v.coordX = 6;
// Set the end of the list
listBegin->next = 0;

// You need one more vector
listBegin->next = new vector3List();
// Use some kind of helper pointer to keep track of what vector you are examining
// if you need it
vector3List * iterator = listBegin->next;
// Setup this new second vector
iterator->v.coordX = 5;
// Remember to set the end of the list!
iterator->next = 0;

// Iterate throgh the list
iterator = listBegin;
while ( iterator != 0 ) {
    // Do stuff
    iterator = iterator->next;
}

当然,这是一个幼稚的实现,但你明白了。

你想要的可以通过数组来实现,当你对向量的需求增加时,可以创建一个新的、更大的数组(基本上复制了
std::vector
的行为),或者通过使用一个链表来实现,链表可以如下所示:

struct vector3List {
     vector3 v;
     vector3List * next;
};
当然,存在更精确的解决方案,但选择取决于您需要对向量做什么

如果您不确定列表是如何使用的,以下是一个示例:

vector3List * listBegin = new vector3List();
// Setup your vector
listBegin->v.coordX = 6;
// Set the end of the list
listBegin->next = 0;

// You need one more vector
listBegin->next = new vector3List();
// Use some kind of helper pointer to keep track of what vector you are examining
// if you need it
vector3List * iterator = listBegin->next;
// Setup this new second vector
iterator->v.coordX = 5;
// Remember to set the end of the list!
iterator->next = 0;

// Iterate throgh the list
iterator = listBegin;
while ( iterator != 0 ) {
    // Do stuff
    iterator = iterator->next;
}

当然,这是一个幼稚的实现,但你明白了。

normalField的定义是什么??更多的代码会有帮助。你没有显示足够的代码让我们理解你想要的。你不能声明例如
std::vector normalField;
…或者
normalField的声明是什么?@BasileStarynkevitch op正在使用双精度结构模拟向量,因此使用std::vector生成多个向量可能会有点事与愿违,特别是如果作业的上下文假设std::vector尚未教授。假设
x
是数组的大小,则数组将只有位置
0
x-1
so
normalField[x]=vector
将超出数组的范围。
normalField
的定义是什么?更多的代码会有所帮助。您没有显示足够的代码,我们无法理解您想要的内容。您不能声明例如
std::vector normalField;
…或者
normalField
的声明是什么?@basilestarynkevich op是什么使用双精度结构模拟向量,因此使用std::vector生成多个向量可能会有点事与愿违,特别是如果作业的上下文假设std::vector尚未被教授。假设
x
是数组的大小,那么数组将只具有
0
x-1
的位置
normalField[x]=vector
将超出数组1。