使用用户定义的类类型对象的向量

Using vector of user defined class type objects

本文关键字:类型 对象 向量 用户 定义      更新时间:2023-10-16

在C++中解决一个简单问题时,我想了解如何在实例化对象向量时使用用户定义类类型的对象向量,而不分配固定(最坏情况下)数量的元素。即

目前我必须使用

vector<grades> students(10000); 

其中10000是我假设的记录的某个最大值。如果某个文件有更多的记录,它显然会崩溃。

因此,在下面的代码中,如何增长类对象的向量动态地读取类变量中的记录。我不能使用push_back(),正如下面的代码中所解释的那样。或者我如何使用push_back()?

下面的代码应该解释-

class grades
{
public:
    string mName;
    string mSurname;
    int mAge;
    string mLocation;
    int mMarks;
    char mGrade;
    //void readdata();
    void calcgrade();
    void showgrade(string name_surname);
};
    using namespace std;
    int main(int argc,char *argv[])
    {
        **vector<grades> students(10000);// I do not want to do this but make it dynamic**
        ifstream infile;
        char c;
        int i=0;
        int no_of_records=0;
        infile.open(argv[1],ios::in);
        if(infile.is_open() != true)
        {
            cerr << "Error opening input data file:" <<argv[1] << "...exitingn";
            exit(-1);
        }
            while(!infile.eof()) 
            {
                 infile >> students[i].mName;//Can i use push_back() here and for reading all below entities, to make vector grow dynamically
                infile >> students[i].mSurname;
                infile >> students[i].mAge;
                infile >> students[i].mLocation;
                infile >> students[i].mMarks;
                i++;
                no_of_records++;
            }
            for(i=0;i<no_of_records;i++)
            {
               //Do some functions on each object students[i] in the vector 
            }
}

仅供参考:-我在C++中读取了一个文本文件,其中有以下条目(一行中实体的顺序和不同类型实体的数量是固定的,我知道这一点,但行的数量可能会根据要读取的不同输入文件而变化):

Name1 Surname1 Course1 Marks1
Name2 Surname2 Course2 Marks2
Name3 Surname3 Course3 Marks3
...
...

EDIT:处理记录实体中各种伪空格、制表符的代码

while(!infile.eof()) 
    {
        c=infile.get();     
        if(isalnum(c))
        {
            infile.seekg(-1,ios::cur);
        }
        if(isalnum(c))
        {
            grades stud_temp;
            infile >> stud_temp.mName;
            infile >> stud_temp.mSurname;
            infile >> stud_temp.mAge;
            infile >> stud_temp.mLocation;
            infile >> stud_temp.mMarks;         
            students.push_back(stud_temp);          
        }
    }

您可以先声明您的向量:

vector<grades> students;

然后读取值,同时推动矢量中的元素:

while(!infile.eof()) 
{
    grades student;
    infile >> student.mName;
    infile >> student.mSurname;
    infile >> student.mAge;
    infile >> student.mLocation;
    infile >> student.mMarks;
    students.push_back(student);
}

您不再需要no_of_records,因为记录的数量将是students.size()