gpt4 book ai didi

c++ - 更改动态分配数组中元素的值

转载 作者:行者123 更新时间:2023-11-28 04:59:36 24 4
gpt4 key购买 nike

我有两个动态分配的类对象数组——学生和教职工。当用户输入年龄时,我想根据年龄更新学生数组或员工数组的元素。但是我下面的代码不起作用。一旦分配给学生,变量 person 就不会重新分配给 staff。无论我输入的年龄如何,我输入的所有数据都只会进入学生。我的代码有什么问题?我怎样才能拥有一个变量并根据条件检查为它分配一个或另一个数组元素?

#include <iostream>
using namespace std;

int main()
{
class info
{
public:
int unique_id;
char* hair_color;
int height;
int weight;
};

class info* student;
student = new info[10];

class info* staff;
staff = new info[10];

for (int i=0; i<10;i++)
{
class info& person = student[i];

int age ;
cout<< "enter age"<<endl;
cin >> age;

if( age > 18 )
{
person = staff[i]; // This assignment doesn't work ??
}
cout<< "enter unique_id"<<endl;
cin >> person.unique_id;
cout<< "enter height"<<endl;
cin >> person.height;
cout<< "enter weight"<<endl;
cin >> person.weight;

}

cout<<" Student "<<student[0].unique_id<<" "<<student[0].height<<"\" "<<student[0].weight<<endl;
cout<<" Staff "<<staff[0].unique_id<<" "<<staff[0].height<<"\" "<<staff[0].weight<<endl;

return 0;
}

最佳答案

You cannot reseat a reference.一旦设置,它就会卡在那里,任何重新分配引用的尝试都将被解释为分配给引用变量的请求。这意味着

person = staff[i];

实际上是将 staff[i]; 复制到 person 中,它是 student[i] 的别名(别名)。 student[i] 将继续接收从用户读取的输入。

鉴于您当前的代码,解决此问题的最简单方法是将引用替换为可以重新放置的指针。

class info* person = &student[i]; // using pointer

int age ;
cout<< "enter age"<<endl;
cin >> age;

if( age > 18 )
{
person = &staff[i]; // using pointer, but note: nasty bug still here
// You may have empty slots in staff
}

cout<< "enter unique_id"<<endl;
cin >> person->unique_id; // note the change from . to ->
....

但是有很多方法可以解决这个问题。您可以延迟创建引用,直到您知道要使用哪个数组。这需要对大量代码进行改组,如果不小心,仍会在数组中留下未使用的元素。

幸运的是,使用 std::vector from the C++ Standard Library's container library. 有更好的方法来做到这一点

std::vector<info> student;
std::vector<info> staff;

for (int i=0; i<10;i++)
{
info person; // not a pointer. Not a reference. Just a silly old Automatic

int age ;
cout<< "enter age"<<endl;
cin >> age;

// gather all of the information in our Automatic variable
cout<< "enter unique_id"<<endl;
cin >> person.unique_id;
cout<< "enter height"<<endl;
cin >> person.height;
cout<< "enter weight"<<endl;
cin >> person.weight;

// place the person in the correct vector
if( age > 18 )
{
staff.push_back(person);
}
else
{
student.push_back(person);
}
}

关于c++ - 更改动态分配数组中元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410827/

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