这是我创建的矢量;
std::vector<std::vector<Vertex*>*> Vertices;
我无法弄清楚如何将std::vector<Vertex*>
推回外部
矢量。
所以我试图做的是:
Vertices.push_back(new vector().push_back(new Vertex()));
但我不确定这样做的正确方法是什么。希望你们能得到这个想法。
答案 0 :(得分:4)
虽然制作指针向量(最好是智能指针)有时候是可以的,但是制作一个指向向量的向量永远不是一个好主意:这使得你的内存管理变得复杂无缘无故。
最好的解决方案是使用顶点对象的矢量,如下所示:
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
个对象。
答案 1 :(得分:1)
你无法在一行中完成。但你可以在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*
。
编辑:为了更好地存储Vertex而不泄漏内存,请查看dasblinkenlight的答案。
答案 2 :(得分:0)
这是可行的。例如,尝试:
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];