我想在一个类中创建一个 valarray 类型的 vector ,其中所述 vector 的每个元素都引用同一类中某个结构类型的 vector 的一个元素。示意性地,我有
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) 中进行赋值?
最佳答案
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);
}
警告。在 vector 调整大小后,不能保证 vector 元素在内存中占据相同的位置。
如果 ps
随时调整大小,您将丢失所有引用。在那种情况下,我会推荐 std::deque
关于c++ - 通过引用分配 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244739/