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

What is the easiest way to copy a nested vector

本文关键字:最简单 方法 是什么 嵌套 复制      更新时间:2023-10-16

在我的代码中,我有一个名为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;

框中的数据是否会通过应用于nBox的更改而更改?

这是珠子的定义:

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参数以及一组操作它的函数

我想你指的是

boxes = nBoxes;

最后。

矢量的CCD_ 6复制CCD_。也就是说,在您的情况下,它将指针复制到bead。珠子对象本身不会被深度复制。

存储在。。。将正确地复制到您的作业表达式上。

但是存储在矢量中的数据只是指针!因此,无论何时从一个向量更改bead数据,都会在两个向量中进行更改,因为两个向量都只包含指向单个内存位置的指针。

nBoxes = boxes;

将制作CCD_ 10矢量的完整副本。对nBoxes的内容所做的任何更改都不会影响boxes的内容。

但是:如果您对bead*指针指向的bead对象进行了更改,那么这些更改也将在boxes向量中看到。如果你想避免这种情况,你需要对向量进行深度复制。

最好忘记嵌套向量,实现一个自定义类,覆盖operator=并按照您的意愿行事(复制子向量(

第二个想法是使用vector< vector< vector <vector <bead> > > > boxes;