迭代对象向量

Iterating over a vector of objects

本文关键字:向量 对象 迭代      更新时间:2023-10-16

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

在源代码中.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);
        }
    }
 }

当面.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) {