替换列表中的对象属性

时间:2017-12-30 01:12:23

标签: c++

就像在标题中一样,我想遍历列表并更改属性。我管理的内容:

使用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。有什么问题?

1 个答案:

答案 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>