通过引用分配向量

时间:2018-03-12 21:33:30

标签: c++ reference variable-assignment

我想在类中创建一个valarray类型的向量,其中所述向量的每个元素在同一个类中引用某个struct-type向量的元素。原理上,我有

struct particle{
   valarray<double> x(2);        //x has 2 components
};  

class SPH{
   vector<particle> ps(1000);    //ps has 1000 particles
   vector<valarray> y(1000);
   void RK4_step();
};

void SPH::RK4_step(){
   for(int a=0; a<1000; a++)
      y[a] = ps[a].x;            //HERE
}  

是否可以通过引用以某种方式在(HERE)中进行分配?

2 个答案:

答案 0 :(得分:2)

使用std::reference_wrapper

struct particle{
   valarray<double> x(2);        //x has 2 components
};

class SPH{
   vector<particle> ps(1000);    //ps has 1000 particles
   vector<std::reference_wrapper<valarray<double>>> y(1000);
   void RK4_step();
};

void SPH::RK4_step(){
   for(int a=0; a<1000; a++)
      y[a] = std::ref(ps[a].x);
}

<强> 警告 。向量调整大小后,不保证向量元素占用内存中的相同点。 如果ps随时调整大小,您将丢失所有引用。在这种情况下,我会建议std::deque

答案 1 :(得分:0)

有什么意义?

为什么不提供一个访问器函数来代替valarray元素?

struct particle{
   valarray<double> x(2);        //x has 2 components
};  

class SPH{
   vector<particle> ps(1000);    //ps has 1000 particles
   valarray<double>& va(size_t n) { return ps[n].x; }
   const valarray<double>& va(size_t n) const { return ps[n].x; }
   // ...
};