通过引用分配向量
Assign vectors by reference
我想在 class 中创建一个 valarray 类型的向量,其中所述向量的每个元素都引用同一 class 中某个结构类型的向量的一个元素。示意性地,我有
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);
}
警告。在矢量调整大小后,不能保证矢量元素在内存中占据相同的位置。
如果 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; }
// ...
};
我想在 class 中创建一个 valarray 类型的向量,其中所述向量的每个元素都引用同一 class 中某个结构类型的向量的一个元素。示意性地,我有
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);
}
警告。在矢量调整大小后,不能保证矢量元素在内存中占据相同的位置。
如果 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; }
// ...
};