Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将向量推回到向量中_C++_Vector_Push_Back - Fatal编程技术网

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

C++ C++;将向量推回到向量中,c++,vector,push,back,C++,Vector,Push,Back,这是我创建的向量 std::向量顶点 我很难弄清楚如何将std::vector推回外部 向量 所以我想做的是: 顶点。向后推(新向量()。向后推(新顶点()) 但我不确定正确的方法是什么。希望你们能明白这个想法。一句话也做不到。但是你可以在4分钟内完成 std::vector<std::vector<Vertex*>*> Vertices; std::vector<Vertex*> * vec = new std::vector<Vertex*>;

这是我创建的向量

std::向量顶点

我很难弄清楚如何将
std::vector
推回外部 向量

所以我想做的是:

顶点。向后推(新向量()。向后推(新顶点())


但我不确定正确的方法是什么。希望你们能明白这个想法。

一句话也做不到。但是你可以在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);
std::向量顶点;
std::vector*vec=新的std::vector;
向量。推回(新顶点());//根据需要多次填充内部向量
顶点。推回(vec);
但你为什么要这么做?如果不为外部向量的每个元素调用
delete
,则会泄漏内存,但在执行此操作之前,需要对内部向量中的每个
顶点*
调用
delete


编辑:为了更好地存储顶点而不泄漏内存,请查看dasblinkenlight的答案。

尽管有时可以创建指针向量(最好是智能指针),但创建指向向量的指针向量从来都不是一个好主意:这会使内存管理复杂化,没有什么好的理由

最好的解决方案是使用顶点对象的向量,如下所示:

std::vector<std::vector<Vertex> > vertices;
vector<Vertex> vv;
vv.push_back(Vertex(...));
vertices.push_back(vv);
std::vector<std::vector<unique_ptr<Vertex> > > vertices;
请注意,如果执行此操作,则可以释放向量中的
顶点
对象。更好的解决方案是使用智能指针,例如,
unique\u ptr
,如下所示:

std::vector<std::vector<Vertex> > vertices;
vector<Vertex> vv;
vv.push_back(Vertex(...));
vertices.push_back(vv);
std::vector<std::vector<unique_ptr<Vertex> > > vertices;
std::向量顶点;

unique\u ptr
将负责自动释放
顶点
对象。

这是可行的。例如,尝试:

std::vector<std::vector<Vertex*>> Vertices;
Vertices.push_pack(std::vector<Vertex*>());
Vertices.back().push_back(new Vertex[8]);

请发布您收到的错误。您需要推送一个
std::vector*
。先弄清楚如何获取指向
std::vector
的指针,然后将其推入导出的向量中。不要尝试在一行代码中这样做。一步一步地做。确保你真的想要所有的指针。我在这里支持
Mat
,为什么你想要
vector
指针而不是
vector
值?你应该使用<代码> STD::向量这里,最有可能的是,我只学习C++,所以我不总是想出最简单的解决问题的方法。@ USE3597 902如果你正在学习C++,那么你应该记住尽可能少地使用<代码>新< /代码>。我对内存有疑问。我知道对于法向量,主向量存储在堆栈中,但它的元素存储在堆中。那么,如果一个向量被推到一个向量向量上,它会被复制到堆中吗?@ShravyaBoggarapu堆栈中存储的向量部分是一对指针。这就是“主向量”。如果你把它推到一个向量向量上,这对指针就会被复制到向量的内容中,它就在堆上。谢谢。因此,只有向量被复制到,而不是已经在堆中的元素。