C ++将向量推回到向量中

时间:2014-05-03 14:10:58

标签: c++ vector push back

这是我创建的矢量;

std::vector<std::vector<Vertex*>*> Vertices;

我无法弄清楚如何将std::vector<Vertex*>推回外部 矢量。

所以我试图做的是:

Vertices.push_back(new vector().push_back(new Vertex()));

但我不确定这样做的正确方法是什么。希望你们能得到这个想法。

3 个答案:

答案 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];