在我的代码中,我有一个名为bead
的结构。我有一个定义为
vector< vector< vector <vector <bead*> > > > boxes
有时,我需要对boxes
进行一些更改,我可能需要还原这些更改。
如果我执行以下操作会发生什么:
vector< vector <vector <vector <bead*> > > > nBoxes;
nBoxes = boxes;
....
//some code that resizes the forth nest in nBoxes and create new content
....
boxes = nBoxes;
是否可以通过应用于nBoxes的更改来更改框中的数据?
这里是珠子的定义:
struct bead{
particle mainPart;
int charge;
int type;
double rho;
double nextRho;
int LID;
double U;
double nextU;
bool touch;
};
需要定义particle
struct particle{
vec pos;
vec oldPos;
vec vel;
vec oldVel;
vec F;
vec oldF;
};
vec
是一个包含velarray参数以及操作它的一系列函数的类。
答案 0 :(得分:3)
我认为你的意思是
boxes = nBoxes;
最后。
向量的 operator =
复制vector
的内容。也就是说,在您的情况下,它将指针复制到bead
。珠子对象本身不会被深层复制。
答案 1 :(得分:2)
存储在...矢量矢量中的数据将在您的分配表达式上正确复制。
但是存储在向量中的数据只是指针!因此,每当您从一个向量更改bead
数据时,您都会更改它们,因为两个向量只包含指向单个内存位置的指针。
答案 2 :(得分:1)
nBoxes = boxes;
将制作boxes
向量的完整副本。对nBoxes
内容所做的任何更改都不会影响boxes
的内容。
但是:如果对bead
指针指向的bead*
对象进行更改,那么这些更改也会在boxes
向量中看到。
如果你想避免这种情况,你需要制作一个矢量的深层副本。
答案 3 :(得分:0)
忘记你的嵌套向量并实现一个覆盖operator =并按你的意愿行事的自定义类(复制子向量)可能是一个好主意
第二个想法是使用vector< vector< vector <vector <bead> > > > boxes;