致力于解决C++中的一个简单问题,想要了解如何使用用户定义类类型的对象向量,而无需在实例化对象向量时分配固定(最坏情况)的元素数量.即
目前我必须使用
vector<grades> students(10000);
Run Code Online (Sandbox Code Playgroud)
其中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
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考: - 我在C++中读取了一个文本文件,其中包含如下条目(实体的顺序和一行中不同类型实体的数量是固定的,我知道但行数可根据要读取的不同输入文件而有所不同):
Name1 Surname1 Course1 Marks1
Name2 Surname2 Course2 Marks2
Name3 Surname3 Course3 Marks3
...
...
Run Code Online (Sandbox Code Playgroud)
编辑:处理各种虚假空间,记录实体中的选项卡的代码
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);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以先声明你的向量:
vector<grades> students;
Run Code Online (Sandbox Code Playgroud)
然后读取值,同时推送向量中的元素:
while(!infile.eof())
{
grades student;
infile >> student.mName;
infile >> student.mSurname;
infile >> student.mAge;
infile >> student.mLocation;
infile >> student.mMarks;
students.push_back(student);
}
Run Code Online (Sandbox Code Playgroud)
您不再需要no_of_records,因为记录的数量将是students.size().
| 归档时间: |
|
| 查看次数: |
12724 次 |
| 最近记录: |