就像在标题中一样,我想遍历列表并更改属性。我管理的内容:
使用namespace std;
class User {
public:
int id;
string name;
User(int id, string name) {
this->id = id;
this->name = name;
}
};
int main()
{
list<User> users;
User u1(1, "foo");
users.push_back(u1);
for (auto v : users) {
v.id = 2;
}
for (auto v : users) {
printf("%d\n", v.id);
}
return 0;
}
不幸的是,ids
仍然是1
。我删除了2
。有什么问题?
答案 0 :(得分:0)
有什么问题?
这部分:
for (auto v : users) {
v.id = 2;
}
错了。 auto v
复制v
,循环体将更改应用于副本。你想要的是在for循环中使用 references ,如下所示:
for (auto& v : users) {
v.id = 2;
}
请注意,在使用printf
的循环中不需要这样做,但仍然是首选,因为您的User
对象复制起来并不便宜,尤其是当name
s很大时/ p>