【发布时间】:2023-03-23 18:50:01
【问题描述】:
我在将对象添加到列表时遇到问题。
我想制作一个人员列表,我知道列表的大小固定为 5 人。 每个人都有一个年龄(int)和一个性别(字符串)。 我想将 Persons 添加到列表中,但我不知道如何,我现在只使用整数。
以下是我目前所拥有的。 随机的年龄和性别是有效的,无论多么笨拙。 我在想而不是像我那样创建 Persons,也许我应该以某种方式在 for 循环中动态创建它们,这会以某种方式生成每次循环迭代的年龄和性别?也许列表应该是指向 Person 对象的指针。
#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;
}
【问题讨论】:
-
提示 -- 如果你有 1000 个
Person,你会声明 1000 个单独的变量,命名为P1、P2、P3等一直到P1000?当然不是。那么你会怎么做呢? -
嗯我想我会做一个 for 循环,int i = 1 和 i myList 我似乎会用 i++ 做 myList.push_back(i),我不知道如何为一个人做这件事。我确实看到了创建每个对象的速度和内存密集程度。
-
我猜你没学过
std::vector和std::array这样的数组和容器。为什么不简单地Person P[5];?