繁体   English   中英

迭代对象向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM