C++ 复制嵌套向量的最简单方法是什么

C++ 复制嵌套向量的最简单方法是什么,c++,stl,copy-constructor,C++,Stl,Copy Constructor,在我的代码中有一个名为bead的结构。我有一个向量,定义为 vector框 有时,我需要对框进行一些更改,并且可能需要恢复这些更改 如果我执行以下操作,会发生什么情况: vector< vector <vector <vector <bead*> > > > nBoxes; nBoxes = boxes; .... //some code that resizes the forth nest in nBoxes and create new co

在我的代码中有一个名为
bead
的结构。我有一个向量,定义为

vector>框

有时,我需要对
框进行一些更改,并且可能需要恢复这些更改

如果我执行以下操作,会发生什么情况:

vector< vector <vector <vector <bead*> > > > nBoxes;
nBoxes = boxes;
....
//some code that resizes the forth nest in nBoxes and create new content
....
boxes = nBoxes;
这需要定义
粒子

struct particle{
  vec pos;
  vec oldPos;
  vec vel;
  vec oldVel;
  vec F;
  vec oldF;
};

vec
是一个类,它包含一个数组参数和一系列函数来操作它。

我想你的意思是

boxes = nBoxes;
最后

向量的
运算符=
复制
向量的内容。也就是说,在您的情况下,它会将指针复制到
bead
。珠子对象本身不会被深度复制

nBoxes = boxes;
将制作
向量的完整副本。对
n框
内容所做的任何更改都不会影响
的内容

但是:如果您对
珠子*
指针指向的
珠子
对象进行更改,则这些更改也将显示在
向量中。
如果你想避免这种情况,你需要对向量进行深度复制。

存储在向量向量中的数据。。。将在赋值表达式上正确复制


但是存储在向量中的数据只是指针!因此,无论何时更改一个向量中的
数据,您都可以同时更改它,因为两个向量都只包含指向单个内存位置的指针。

最好忘记嵌套向量,实现一个自定义类,该类重写operator=并按您的意愿执行(复制子向量)


第二个想法是使用
vector>框

所有这些嵌套的目的到底是什么?复制向量最简单的方法就是复制向量。对于复制来说,作业总是一个很好的第一步。请注意,您正在容器中使用裸指针。通常这不是一个好主意。这些珠子是动态分配的吗?谁拥有它们?Karl嵌套的目的是说明一些是坐标x、y、z,其中包含n个珠子的向量@sbi,是的,珠子是动态分配的,它们被保存在不同的载体中。因为它太复杂,很难使用。在这种情况下,自定义类通常更好。我不确定为什么语义未知、bug数量任意的专有类必然比已知的(尽管有些复杂)数据结构更好。很可能是,但也可能不是。如果有什么不同的话,我建议使用适当的typedef来合理地命名这些嵌套级别。这可能是个人的偏好,但是自定义类可以比普通类“变得”更友好。例如:运算符[]选择levelSo,我对珠子所做的任何更改都将传输到另一个向量,但我对向量所做的任何更改(删除或添加珠子)都不会传输。太好了,我就是这么想的need@Yotam当前位置这正是将要发生的事情。
nBoxes = boxes;