迭代对象向量

时间:2017-10-31 17:42:31

标签: c++ vector

我试图迭代一个对象向量并执行一个简单的更新函数,每次将对象向右移动1个像素。但是,当我运行代码时,x值只会更改一次。

在source.cpp中:

import Alamofire

Alamofire.request("https://google.com").responseString(queue: queue) { response in
            print("\(response.result.isSuccess)")
}

In person.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);
        }
    }
 }

}

正如你所看到的,我从数组中选择一个人并将它们设置为活着,然后绘制。它们是每帧绘制的,但不会更新。任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

for (Person p : people)创建向量的每个元素的副本,然后修改对向量中的原始对象没有影响的副本。你想要的是for (Person& p : people)

顺便说一下:除非确实需要立即清除输出,否则应避免使用endl。相反,在大多数情况下,您应该只输出'\n'

答案 1 :(得分:2)

在此声明中:

for (Person p : people) {
    ...
}

你在p对象中制作副本,更改它,最后将其销毁

为了保留您的更改,请执行以下操作:

for (Person &p : people) {
    ...
}

答案 2 :(得分:1)

如果您想要修改循环中的Person,则需要使用引用 - 否则您将使用vector中的任何内容的副本然后被丢弃。

for (Person p : people) {

需要

for (Person& p : people) {