我有一堂课,像这样:
class Particle()
{
void CalcSomething(Super& arg){
for(unsigned long long index = 0; index < arg.NumberOfParticle(); index ++){
if(this != arg.ParticleMemoryPointer(index)){
// Do the calculations
}
}
}
}
以下类包含粒子:
class Super()
{
const Particle* const ParticleMemoryPointer(unsigned int index)
{
std::list<Particle>::iterator iter = mParticles.begin();
std::advance(iter, index);
return &(*iter);
}
std::list<Particle> mParticles;
}
这个想法是,调用 CalcSomething 的粒子实例需要检测何时从与函数内部索引所寻址的粒子实例相同的 Particle 实例调用 CalcSomething CalcSomething
。(这有意义吗?我的措辞不是很好……)
您意识到这样做的原因是,如果我们要在两个粒子之间进行计算,我们需要确保它们是不同的粒子。
一些 cout 语句显示 ParticleMemoryPointer 返回的内存地址this
与列表中有一项时的指针不同。(它们应该是,对于一个项目,我们用同一个粒子进行两次计算。)
我希望这是可以理解的。
编辑Super 中调用 CalcSomething 的函数:
void Super::UpdateParticles(double time_step)
{
std::list<Particle>::iterator iter = mParticles.begin();
for(unsigned long long index = 0; index < mParticles.size(); index ++){
std::advance(iter, 1);
iter->CalcSomething(*this);
}
}
编辑 2我们不能使用 std::vector。(我们知道你在想它!)