提问人:bad_chemist 提问时间:12/18/2021 最后编辑:bad_chemist 更新时间:12/18/2021 访问量:93
为什么这个赋值运算符不工作?
Why is this assignment operator not working?
问:
我有一个对象向量. 是对象的一个属性。
该对象有 3 个属性:一个 、 一个 cpp 字符串,哪个 .SolventInGrid
Particle
SolventInGrid
NewGrid
Particle
coords
vector <int>
ptype
orientation
int
我想做的是,我想找到一个具有特定坐标的溶剂粒子,并将它们替换为 .我有一个函数可以做一些其他事情,并在一天结束时进行此更改。如果我这样做,它会起作用:SolventInGrid
to_rot
loc_0
...
for...
// update position of the solvent particle you displaced during this move
int c =0;
for (Particle P: NewG.SolventInGrid){
c++;
if (P.coords == to_rot){
break;
}
}
NewG.SolventInGrid.at(c-1).coords = loc_0;
break;
}
}
return NewG;
}
但是,如果我这样做:
...
for ...
// update position of the solvent particle you displaced during this move
int c =0;
for (Particle P: NewG.SolventInGrid){
if (P.coords == to_rot){
P.coords = loc_0; // this is the assignment statement to the Particle P within NewG.SolventInGrid
break;
}
}
break;
}
}
return NewG;
}
如果我打印出 NewG.SolventsInGrid 的内容,则矢量的内容没有变化。没有以 loc_0 为坐标的元素。(一开始就没有。
这可能是什么原因造成的?为什么这样的分配是坏的/不正确的?
答: 暂无答案
评论
for(Particle P: NewG.SolventInGrid)
P
是 中元素的副本。如果你想要一个参考,那就是NewG.SolventInGrid
for(Particle& P: ...)
for (Particle& P : ...)