📄 1号文件.cpp
字号:
#include<iostream>
#include<vector>
using namespace std;
int NUM_SUBJECT=5;
struct Record
{
string number; // 学号(中间不能有空格)
string name; // 姓名(中间可以有空格)
string gender; // 性别(中间无空格)
float score[NUM_SUBJECT]; // 分别为该学生5门课的成绩
float sum; // 总分
float average; // 平均分
int index; // 名次
bool toBeDeleted; // 做是否删除的标记
Record() {toBeDeleted = false;}
};
class RecordVec : public vector<Record*>
{
friend ostream& operator<< (ostream& out , const RecordVec& rec )
{
for(RecordVec::iterator iter=rec.begin();iter!=rec.end();++iter)//iter++指向下一个结构
out<<(*iter)->number;
out<<(*iter)->name;
out<<(*iter)->gender
for(int ix=0;ix<NUM_SUBJECT;ix++)
out<<(*iter)->score[ix];
out<<(*iter)->sum;
out<<(*iter)->average;
out<<(*iter)->index;
out<<(*iter)->toBeDeleted;
return out;
};
friend istream& operator>> (istream& in,const RecordVec& rec)
{ for(RecordVec::iterator iter=rec.begin();iter!=rec.end();++iter)
in>>(*iter)->number;
in>>(*iter)->name;
in>>(*iter)->gender
for(int ix=0;ix<NUM_SUBJECT;ix++)
in>>(*iter)->score[ix];
(*iter)->sum=0;
for(int ix=0;ix<NUM_SUBJECT;ix++)
(*iter)->sum=(*iter)->sum+(*iter)->score[ix];
in>>(*iter)->sum;
(*iter)->average=(*iter)->sum/NUM_SUBJECT;
in>>(*iter)->average;
in>>(*iter)->index;
in>>(*iter)->toBeDeleted;
return in;
};
//RecordVec可以直接使用vector中定义的所有函数,
//但重写了clear()函数、erase()函数和增加了析构函数;
//并重载了输入、输出操作符。
//这是因为vector的删除元素的操作只会释放存储元素的空间;
//对于本程序来说,就是只释放Record指针,却并不会释放该指针所指向的对象。
//因此RecordVec覆盖了基类中的clear()函数和erase()函数,使得在删除元素时首先释放该元素,
//即Record指针所指向的Record对象,然后再调用基类中被覆盖的同名函数以实现删除元素的功能。
//增加了析构函数是为了将指针销毁的同时,也将其所记录的所有对象销毁。
//重载了输入、输出操作符是为了便于从输入、输出流中还原或保存记录的对象。
public:
// 销毁数组中记录的所有Record所占用的内存空间,
//并且清空数组存储的记录
// 该函数覆盖了基类中的同名函数
void clear(){
for(RecordVec::iterator it=this->end();
it!=this->begin();it--)
erase(it);
}; //销毁指定的记录,然后从数组中将其删除
// 该函数覆盖了基类中的同名函数
RecordVec::iterator erase(RecordVec::iterator where)
{
RecordVec::iterator wh=where-1;
delete *where;
this->erase(where);} //////// erase(it);
~RecordVec();
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -