gpt4 book ai didi

c++ - 当更改对象 vector 的对象时,值不断重置

转载 作者:行者123 更新时间:2023-12-02 02:28:28 27 4
gpt4 key购买 nike

我创建了两个类。第一个类接受一个字符串作为参数,并将其设置为人名。

第二类是我创建一个保存对象的 vector 对象的地方。我需要这个对象稍后在代码中创建附加功能。 (此代码是我的主代码遇到的问题的示例)

在主要部分中,我创建了人和我尝试修改的人的对象。

修改代码后,它会恢复。

我尝试过引用所有内容,但它不起作用。我不确定我做错了什么。

创建对象的第一个类(这些对象将存储在 vector 内)

class person {
// Private
string name;
public:
// Constructor
person(const std::string& n) : name(n) {};

std::string getName() {
return name;
}

void setName(const std::string& n) {
name = n;
}

};

这是用于创建采用对象 vector 的对象的类。

class people {
// Private
vector<person> _peeps;
public:
// Constructor
people(const vector<person>& r) : _peeps(r) {};

vector<person> getRobots() {
return _peeps;
}

void addRobot(const person& r) {
_peeps.push_back(r);
}
};

这是代码的主要部分,我在其中创建对象并打印输出。

int main(){

string arr[5] = { "john", "eddison", "jeves", "elenour", "curtis"};

vector<person> rob;

for (auto x : arr) {
rob.push_back(person(x));
}

people robots = people(rob);

for (person &x : robots.getRobots()) {
cout << x.getName() << ", ";
}

cout << "\n2\n";

for (person &x : robots.getRobots()) {
x.setName(x.getName() + "x");
cout << x.getName() << ", ";
}

cout << "\n3\n";

for (person &x : robots.getRobots()) {
cout << x.getName() << ", ";
}
}

这是代码的输出

1(我输出对象 vector 内的所有值)

2(我编辑 vector 内的所有值)

3(测试以显示值是否已更改)

1

john, eddison, jeves, elenour, curtis,

2

johnx, eddisonx, jevesx, elenourx, curtisx,

3

john, eddison, jeves, elenour, curtis,

为什么 3 处的输出与 2 处的输出不同?

最佳答案

您返回拷贝而不是引用,

使用

const std::vector<person>& getRobots() const {  return _peeps; }
std::vector<person>& getRobots() { return _peeps; }

关于c++ - 当更改对象 vector 的对象时,值不断重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65364243/

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