这是我创建的向量;
std::vector<std::vector<Vertex*>*> Vertices;
而且我在弄清楚如何将std::vector<Vertex*>
推回外部时遇到麻烦向量。
所以我想做的是:
Vertices.push_back(new vector().push_back(new Vertex()));
但是我不确定正确的方法是什么。希望你们的想法。
尽管有时可以创建一个指针向量(最好是智能指针),但将指针向量作为向量绝不是一个好主意:这毫无理由使您的内存管理复杂化。
最佳解决方案是使用顶点对象的矢量,如下所示:
std::vector<std::vector<Vertex> > vertices;
这将使您像这样回退:
vector<Vertex> vv;
vv.push_back(Vertex(...));
vertices.push_back(vv);
如果要具有多态性的Vertex
的后代向量,请使用指针向量的向量:
std::vector<std::vector<Vertex*> > vertices;
...
vector<Vertex*> vv;
vv.push_back(new Vertex(...));
vertices.push_back(vv);
请注意,如果要执行此操作,您将可以释放矢量内的Vertex
对象。更好的解决方案是使用智能指针-例如unique_ptr
,如下所示:
std::vector<std::vector<unique_ptr<Vertex> > > vertices;
[unique_ptr
将负责自动释放Vertex
对象。
您不能单行执行。但是您可以在4中完成;
std::vector<std::vector<Vertex*>*> Vertices;
std::vector<Vertex*> * vec = new std::vector<Vertex*>;
vec.push_back(new Vertex()); // fill the inner vector as many times as you need
Vertices.push_back(vec);
但是为什么要这么做呢?如果您不为外部向量的每个元素调用delete
,则将泄漏内存,但是在执行此操作之前,您需要在内部向量的每个delete
上调用Vertex*
。
编辑:有关存储顶点而不泄漏内存的更好方法,请查看dasblinkenlight的答案。
这是可行的。例如,尝试:
std::vector<std::vector<Vertex*>> Vertices;
Vertices.push_pack(std::vector<Vertex*>());
Vertices.back().push_back(new Vertex[8]);
遵循此代码,您不需要使用任何额外的内存。要访问或修改位于第一个向量的第i个成员,第二个向量的第j个成员以及数组的第6个成员中的元素,可以使用:
Vertices.at(i).at(j)[6];