Работая над решением простой проблемы в 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] << "...exiting\n";
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
...
...
РЕДАКТИРОВАТЬ: код для обработки всех видовпаразитных пространств, вкладок в записях сущностей
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);
}
}