我有一个像这样的类粒子,
class Particle
{
public:
std::vector<Particle*> getNbh () const;
void setNbh (const std::vector<Particle*>&);
private:
std::vector<Particle*> nbh_;
};
并Particle::setNbh(const std::vector<Particle*>&)
实现了功能,
void Particle::setNbh (const std::vector<Particle*>& nbh)
{
nbh_ = nbh;
}
那么有一个非成员函数updateNeighbors (std::vector<Particle>& particles, double cutoff)
void updateNeighbors (std::vector<Particle>& particles, double cutoff)
{
for (auto particle : particles)
{
auto nbh = std::vector<Particle*>();
for (auto other : particles)
if (&particle != &other
&& norm(particle.getPosition() - other.getPosition()) < cutoff)
nbh.push_back(&other);
particle.setNbh(nbh);
}
}
问题是当我用这个函数更新邻居时,nbh_
成员没有正确更新,我测试它打印getNbh()
每个粒子的大小。
哪种是复制构造的正确方法,std::vector<Particle*>
以便我可以获得所需的行为?