Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;向列表中添加对象时出现问题_C++_List - Fatal编程技术网

C++ C++;向列表中添加对象时出现问题

C++ C++;向列表中添加对象时出现问题,c++,list,C++,List,向列表中添加对象时遇到问题 我想列一张名单,我知道名单的大小固定在5个人。 每个人都有一个年龄(int)和一个性别(string)。 我想把这些人添加到列表中,但我不知道如何添加,我现在只使用了整数 以下是我到目前为止的情况。 随机的年龄和性别是有效的,不管这是多么笨拙。 我在想,不是像我那样创建人,也许我应该以某种方式在for循环中动态创建他们,以某种方式在每个循环迭代中生成年龄和性别?也许列表应该是指向Person对象的指针 #include <iostream> #includ

向列表中添加对象时遇到问题

我想列一张名单,我知道名单的大小固定在5个人。 每个人都有一个年龄(int)和一个性别(string)。 我想把这些人添加到列表中,但我不知道如何添加,我现在只使用了整数

以下是我到目前为止的情况。 随机的年龄和性别是有效的,不管这是多么笨拙。 我在想,不是像我那样创建人,也许我应该以某种方式在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;
}
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];