[英]Iterating over a vector of objects
我试图迭代一个对象矢量并执行一个简单的更新功能,每次将对象向右移动1个像素。 但是,当我运行代码时,x值只更改一次。
在source.cpp中:
for (int i = 0; i < Screen::SCREEN_WIDTH * Screen::SCREEN_HEIGHT; i++) {
people.push_back(Person());
}
for (int i = 0; i < 1; i++) {
people[i].isAlive = true;
}
while(true) {
for (Person p : people) {
if (p.isAlive == true) {
p.Update(p);
cout << p.x << endl;
screen.setPixel(p.x, p.y, 255, 0, 0);
}
else {
screen.setPixel(p.x, p.y, 0, 0, 0);
}
}
}
在person.cpp
void Person::Update(Person &person) {
person.x += 1;
}
正如你所看到的,我从数组中选择一个人并将它们设置为活着,从而绘制出来。 它们是每帧绘制的,但不会更新。 任何人都可以帮我解决这个问题吗?
for (Person p : people)
创建向量的每个元素的副本,然后修改对向量中的原始对象没有影响的副本。 你想要的是什么for (Person& p : people)
。
顺便说一句:你应该避免使用endl
除非你真的需要立即清除输出。 相反,在大多数情况下,您应该输出'\\n'
。
在这个声明中:
for (Person p : people) {
...
}
你在p对象中制作副本,改变它,最后毁掉它
为了保留您的更改,请执行以下操作:
for (Person &p : people) {
...
}
如果你想修改循环中的Person
,你需要使用一个引用 - 否则你将使用vector
的任何内容的副本,然后被丢弃。
for (Person p : people) {
需要是
for (Person& p : people) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.