我想在类中创建一个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)中进行分配?
答案 0 :(得分:2)
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; }
// ...
};