迭代对象向量
Iterating over a vector of objects
我正在尝试迭代对象的向量并执行一个简单的更新功能,每次将对象向右移动 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) {
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 迭代时从向量和内存中删除对象
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 如何创建从同一类继承的不同对象的向量
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 从多个源构造一个对象,包括一个对象向量
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- 将向量对象存储在共享指针投掷错误中
- E0312,C2664尝试将向量对象作为函数参数传递时错误
- 相对于向量对象的两个成员,找到两个向量的相交的有效方法
- 将数据从文件读取到向量对象
- C 向量对象访问
- 向量对象声明后的括号是什么意思
- 2向量对象指向相同的分配内存
- 如何返回向量对象
- 传递单个或向量对象时没有重载函数的实例
- 指向数组和向量对象的指针
- 向量对象库,可以存储其他对象类型的对象
- 如何从另一个向量/对象集构造新的向量/指针集