使用用户定义的类类型对象的向量
Using vector of user defined class type objects
在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()
。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息