📄 stuinfovec.cpp
字号:
//StuInfovec.cpp文件
#include"StuInfoVec.h"
StuInfoVec::~StuInfoVec()
{recVec.clear();}
void StuInfoVec::addRecord(Record* rec)
{
if (rec!=NULL)
{recVec.push_back(rec);}
}
int StuInfoVec::removeperform()
{
int deletedNum=0;//为了获得更高的效率。从数组的末尾开始查找作了标记的纪录并将其删除
Iterator it,it2,it_end;
Iterator it_beforeBegin=recVec.begin()-1;
int inx;//被删除记录的名次
for(it=recVec.end()-1;it!=it_beforeBegin;it--)
{
if((*it)->toBeDeleted)
{
inx=(*it)->index;
it=recVec.erase(it);//更新剩下的所有记录的名次 将名次排在被删除记录后面的记录的名次减1
deletedNum++;
it_end=recVec.end();
for(it2=recVec.begin(); it2!=it_end;it2++)
{if((*it2)->index > inx) (*it2)->index--;}
}
}
return deletedNum;
}
StuInfoVec::Iterator StuInfoVec::findRecord(const string& pattern,int type, StuInfoVec::Iterator from)
{
Iterator it;
Iterator it_end=recVec.end();
for(it=from;it!=it_end;it++)
{
if((type==0 &&(*it)->number==pattern)||(type==1&&(*it)->name==pattern)||(type==2&&(*it)->index==atoi(pattern.c_str())))
break;
}
return it;
}
void StuInfoVec::saveRecords(ostream &os)
{os<<recVec;}
int StuInfoVec::loadRecords(istream &is)
{
int ori=size();is>>recVec;int addedCount=size()-ori;//如果是在原有记录的基础上追加新的纪录,则更新所有记录的名次项
if(ori!=0)
{
int i,j;int num=size();
int ncount;//记录总分大于当前记录的人数
float sumi;
for(i=0;i<num;i++)
{
ncount=0;
sumi=recVec[i]->sum;
for(j=0;j<num;j++)
{if(recVec[j]->sum > sumi) ncount++;}
recVec[i]->index=ncount+1; }
}
return addedCount;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -