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

时间:2011-07-27 09:35:15

标签: c++ stl copy-constructor

在我的代码中,我有一个名为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参数以及操作它的一系列函数的类。

4 个答案:

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