有人可以告诉我这是一个通过id搜索帐户的好方法,并输出关于他的所有数据吗?如果没有,哪种方式最好?
我有这个:
void account::showacc() {
ifstream inFile;
inFile.open("account.dat",ios::binary|ios::in|ios::app);
int accnum1,n;
cout<<"Enter account num: ";
cin>>accnum1;
n=test();
for(int i=0;i<n;i++)
{
inFile.read((char*)&acc,sizeof(acc));
if(accnum==accnum1)
{
cout<<"account number is: "<<accnum<<endl;
cout<<"The possesor's name is :"<<name;
}
}
inFile.close();
}
而test()
是:
int account::test()
{
ifstream inFile;
inFile.open("account.dat",ios::binary|ios::in|ios::app);
inFile.seekg(0,ios::end);
int n;
n=inFile.tellg()/sizeof(acc);
inFile.close();
return n;
}
答案 0 :(得分:2)
嗯,这会起作用,但它会变慢......取决于你的文件有多大,以及你的程序运行多长时间(即,如果它是一个持久的程序运行在背景或某种类型的服务),对文件进行内存映射,和/或将整个文件读入std::stringstream
,然后在内存中扫描存储的文件会更好。同样,这将取决于您的文件有多大,以及阅读程序的持久性。如果它是一个巨大的文件,你的程序只运行一次然后退出,那么是的,你当前的方法是可以的。
答案 1 :(得分:1)
您可以通过更改for循环来提高效率。事实上,即使您找到了帐号,看起来您也会浏览整个文件。假设没有重复的数字,您应该将其设置为在找到数字时终止。
答案 2 :(得分:1)
根据您的使用情况,您可能最好使用sqlite之类的数据库引擎,并让它负责搜索您。 Sqlite作为C ++库存在,您可以在程序中使用它。