我有一个这样的Class粒子,
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*>
的正确方法是哪种,这样我可以得到所需的行为? 最佳答案
在两个循环中都将for ( auto
替换为for ( auto&&
。
您正在从Particle
vector 创建每个particles
的本地副本,我强烈希望您不打算这样做。auto&&
在类型推导上下文中使用&&
,这意味着auto&&
可以是右值引用,const
引用或常规引用,具体取决于初始化变量的方式。当您不想考虑容器时,这是一种遍历容器的不错的“默认”方法。
关于c++ - std::vector <Class *>不能正确构造拷贝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15871135/