C++ C++;向列表中添加对象时出现问题
向列表中添加对象时遇到问题 我想列一张名单,我知道名单的大小固定在5个人。 每个人都有一个年龄(int)和一个性别(string)。 我想把这些人添加到列表中,但我不知道如何添加,我现在只使用了整数 以下是我到目前为止的情况。 随机的年龄和性别是有效的,不管这是多么笨拙。 我在想,不是像我那样创建人,也许我应该以某种方式在for循环中动态创建他们,以某种方式在每个循环迭代中生成年龄和性别?也许列表应该是指向Person对象的指针C++ C++;向列表中添加对象时出现问题,c++,list,C++,List,向列表中添加对象时遇到问题 我想列一张名单,我知道名单的大小固定在5个人。 每个人都有一个年龄(int)和一个性别(string)。 我想把这些人添加到列表中,但我不知道如何添加,我现在只使用了整数 以下是我到目前为止的情况。 随机的年龄和性别是有效的,不管这是多么笨拙。 我在想,不是像我那样创建人,也许我应该以某种方式在for循环中动态创建他们,以某种方式在每个循环迭代中生成年龄和性别?也许列表应该是指向Person对象的指针 #include <iostream> #includ
#include <iostream>
#include <list>
#include <memory>
using namespace std;
class Person {
private:
const int OLDEST_AGE = 100;
const int YOUNGEST_AGE = 1;
int age;
string gender;
public:
Person()
{
age = generateAge();
gender = generateGender();
}
// Person: generate random age for Person, from 1-100
int generateAge() {
int randomAge;
randomAge = rand() % (OLDEST_AGE - YOUNGEST_AGE + 1) + YOUNGEST_AGE;
return randomAge;
};
// Person: generate random gender for Person, Male or Female
string generateGender() {
int genderNumber;
genderNumber = rand() % (1 - 0 + 1) + 0;
if (genderNumber == 1)
return "Male";
else
return "Female";
};
void getStats() {
cout << "Person Age: " << age << endl;
cout << "Person Gender: " << gender << endl;
};
};
int main()
{
Person P1, P2, P3, P4, P5;
// Just to see if the objects are created
P1.getStats();
P2.getStats();
P3.getStats();
P4.getStats();
P5.getStats();
list<Person> myList;
list<Person>::iterator IT;
for (int i = 1; i <= 5; i++)
//don't know how to add each Person to the list
myList.push_back(P1);
cout << "myList contains: ";
for (IT = myList.begin(); IT != myList.end(); IT++)
// similar to above, how do I get the list to print each object's stats
P1.getStats();
cout << endl;
return 0;
}
vector<Person> people;
for (int i = 0; i < 5; i++) {
people.push_back(Person());
}
for (Person person : people) {
person.getStats();
}
#包括
#包括
#包括
使用名称空间std;
班主任{
私人:
最大年龄常数=100;
最小年龄常数=1;
智力年龄;
字符串性别;
公众:
人()
{
年龄=世代();
性别=generateGender();
}
//人员:为人员生成随机年龄,从1-100
int generateAge(){
int随机化;
randomAge=rand()%(最老的年龄-最年轻的年龄+1)+最年轻的年龄;
返回随机数;
};
//人员:为人员生成随机性别,男性或女性
字符串生成器(){
int genderNumber;
genderNumber=rand()%(1-0+1)+0;
如果(genderNumber==1)
返回“男性”;
其他的
返回“女性”;
};
void getStats(){
cout如果您想按照比较列表和向量的另一个问题中的规定,一个接一个地添加大量元素,那么在您的情况下使用向量会更好
回到问题上来,正如一些评论所指出的,为每个人声明一个变量并不是一个好的做法。相反,您可以使用如下循环填充列表:
for(int i = 0; i < 5; i++)
myList.push_back(Person());
for(int i=0;i<5;i++)
myList.push_back(Person());
然后,要访问这些对象,只要在需要的地方再次循环浏览列表即可
for(int i = 0; i < 5; i++)
myList[i].getStats();
for(int i=0;i<5;i++)
myList[i].getStats();
您可以创建一个向量,然后运行一个循环,在该循环中实例化person,然后将其推送到向量中。这样,您就不需要创建单独的person变量,如p1、p2等,并且向量将保存所有“person”对象
矢量人;
对于(int i=0;i<5;i++){
人。推回(人());
}
用于(人:人){
person.getStats();
}
Hint——如果你有1000个Person
,你会声明1000个单独的变量名为P1
,P2
,P3
,等等。一直到P1000
?当然不会。那么你会怎么做呢?嗯,我想我会做一个for循环,int I=1,我猜你没有学习数组和容器例如std::vector
和std::array
。为什么不干脆Person P[5];
?