gpt4 book ai didi

c++ - 为什么不更新 vector 内结构内的 bool 值?

转载 作者:太空宇宙 更新时间:2023-11-04 15:37:05 26 4
gpt4 key购买 nike

这听起来像是一个非常基本的问题,但我已经尝试修复一个简单的错误一个多小时了,但我似乎无法理解发生了什么。

我的头文件中有以下结构声明:

struct StudentBody
{
string name;

Vec2 position;

bool disabled;

StudentBody(string name, Vec2 position) : name(name), position(position) {}
};

这个结构被填充到一个类型的 vector 中:

std::vector<StudentBody> students_real;

像这样:

students_real =
{
StudentBody("student1",Vec2(DISPLAY_WIDTH - 50, LOWER_MARGIN + 100)),
StudentBody("student2",Vec2(DISPLAY_WIDTH - 100, LOWER_MARGIN + 100)),
StudentBody("student3",Vec2(DISPLAY_WIDTH - 150, LOWER_MARGIN + 100)),
StudentBody("student4",Vec2(DISPLAY_WIDTH - 200, LOWER_MARGIN + 100))
};

默认情况下,所有学生的“已禁用”都设置为 false。

然后我有一个由屏幕刷新率触发的“更新”方法,在该方法中我有以下代码:

for (auto it = students_real.begin(); it != students_real.end(); it++)
{
auto student_to_check = *it;

CCLOG("student %s disabled -> %i",student_to_check.name.c_str(),student_to_check.disabled);

if (student_to_check.name == "student1" || student_to_check.disabled) {
continue;
}

bool disableStudent = true;

//... A custom condition here checks if "disabledStudent" should become false or stay as true...

if (disableStudent)
{
CCLOG("Disabling %s",student_to_check.name.c_str());

student_to_check.disabled = true;

CCLOG("student %s disabled -> %i",student_to_check.name.c_str(),student_to_check.disabled);
}
}

这里的问题是“已禁用”标志没有保持为真。当我首先检查条件时,它是错误的。然后我也检查我的第二个条件,如果满足我将其设置为 true。然而,下一次这个 for 循环开始时,条件又回到 false。

这让我相信我的 "auto student_to_check = *it;" 给我一个结构的拷贝来处理它,而不是结构本身?或者发生了什么事?为什么我不能修改 vector 中结构的值?

最佳答案

这个:

auto student_to_check = *it;

声明一个局部变量,它是 vector 中结构的拷贝。迭代器指向 vector 中的结构,因此您可以使用:

auto student_to_check = it;

和:

student_to_check->disabled = true;

或更简单的以下访问 vector 结构中的任何内容。那么你不需要局部变量:

it->disabled = true;

更好的方法是使用 C++11 的基于范围的 for 循环,正如@sp2danny 评论的那样:

for(auto& student_to_check : students_real)

student_to_check 将引用 vector 中的结构而不是本地拷贝,其余代码保持原样。

关于c++ - 为什么不更新 vector 内结构内的 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com