我正在制作一组矢量以保存为法线。因为我们还没有学过如何在课堂上做矢量,所以我制作了一个同样适用的结构:
struct vector3
{
double xcoord;
double ycoord;
double zcoord;
};
然后,在我的功能开始时,我有这个:
vector3 vector;
vector3* normalField = new vector3[x];
当函数循环时,在每个循环中,它将新值应用于“向量” - 在函数的末尾,它将数组的一部分设置为向量。
normalField[x] = vector;
这个想法是通过不创建一大堆新的向量来节省内存,因为我不知道何时何地可以在该组向量上使用删除函数。这会有用吗?或不?这样做的最佳方法是什么?
代码整体上非常冗长 - 我正在编写一个算法来为程序生成的地形创建法线区域。我没有使用内置的vector类,因为我们不应该因为某些愚蠢的原因。我责怪教授。
答案 0 :(得分:3)
赋值normalField [x] = vector将深度复制向量中的数据;你将创建尽可能多的向量,因为normalField []中有元素。
请记住,在C ++中,结构和类之间的唯一区别在于,在结构数据中,成员和函数默认是公共的,但在类中,默认情况下它们是私有的。
答案 1 :(得分:0)
你想要的是通过数组实现,并在你需要向量时创建一个新的更大的数组(基本上复制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;
}
这当然是一个天真的实现,但你明白了。