C++ 对象的向量,每个对象都给它';s成员
我有两个类,顶点和三角形。首先我创建一个顶点场,然后在顶点场外创建一个三角形面的向量。每个顶点都需要指向与其相邻的每个三角形面的指针或引用 这是一个简单的例子,我有,但它不工作C++ 对象的向量,每个对象都给它';s成员,c++,C++,我有两个类,顶点和三角形。首先我创建一个顶点场,然后在顶点场外创建一个三角形面的向量。每个顶点都需要指向与其相邻的每个三角形面的指针或引用 这是一个简单的例子,我有,但它不工作 struct Vertex { float x, y, z; vector<Triangle*> adj_triangles; } struct Triangle { Vertex *v1; Vertex *v2; Vertex *v3; Triangle(
struct Vertex {
float x, y, z;
vector<Triangle*> adj_triangles;
}
struct Triangle {
Vertex *v1;
Vertex *v2;
Vertex *v3;
Triangle(Vertex *v1_in, Vertex *v2_in, Vertex *v3_in) {
v1 = v1_in;
v2 = v2_in;
v3 = v3_in;
v1->adj_triangles.push_back(this);
v2->adj_triangles.push_back(this);
v3->adj_triangles.push_back(this);
}
}
struct Mesh {
vector< vector<Vertex> > field;
vector< Triangle > triangles;
}
其中,v1、v2、v3当然是指向顶点对象的有效指针
当我尝试从顶点访问三角形时,就像这样
triangles.push_back( Triangle ( v1, v2, v3 ) );
v.adj_triangles[index]->member;
我没有得到我想要的。我认为这可能是因为向后推一个临时三角形首先会创建临时的,根据指针初始化它的值。然后按值复制并销毁。因此,每个顶点都有一个指向不再存在的对象的指针
所以我想知道实现这一目标的方法是什么?我应该使用智能指针的向量吗
谢谢你抽出时间
编辑:
只是想更清楚地说明我的要求。我对代码不起作用的原因的分析是否正确?你觉得这个怎么样
struct Triangle {
Vertex *v1;
Vertex *v2;
Vertex *v3;
Triangle(Vertex *v1_in, Vertex *v2_in, Vertex *v3_in) {
v1 = v1_in;
v2 = v2_in;
v3 = v3_in;
}
void give_address() {
v1->adj_triangles.push_back(this);
v2->adj_triangles.push_back(this);
v3->adj_triangles.push_back(this);
}
}
这就解决了问题。但是我想知道这是否是一种不好的做法。如果
向量
在您推回时没有足够的空间,它将重新调整大小,使指向先前向量
中的任何值的指针无效
您需要保留正确的数量,以便不必调整大小,或者存储指向值的指针,而不是值本身
如果您选择指针路径,最好存储一个唯一的\u指针如何创建v1、v2、v3
对象?它们的创建方式类似于for(int i=0;i嗯,Mesh
使用vector
和vector
来创建结构副本而不是指针。我没有得到我想要的@MVTC也许我错过了,但你到底想说什么呢?我很高兴我问了。我不知道这件事。虽然这并不是我遇到的问题的原因,但我确信这可能会在以后产生问题。如果我没有问的话,我会实施我的修复方案,而且可能从来都不知道这个挥之不去的问题。我使用了独特的ptr。谢谢
triangles.push_back( Triangle ( v1, v2, v3 ) );
triangles.back().give_address();