通过引用分配向量

Assign vectors by reference

本文关键字:向量 分配 引用      更新时间:2023-10-16

我想在一个类内制作一个 valarray-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
}  

是否可以以某种方式通过引用(此处(进行分配?

使用 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

> 有什么意义?

为什么不只提供一个访问器函数来获取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; }
   // ...
};