【发布时间】:2018-01-08 10:36:39
【问题描述】:
我已经定义了一个这样的类:
class myClass {
private:
int count;
string name;
public:
myClass (int, string);
...
...
};
myClass::myClass(int c, string n)
{
count = c;
name = n;
}
...
...
我还有一个 *.txt 文件,每一行都有一个名称:
David
Jack
Peter
...
...
现在我逐行读取文件并为每一行创建一个新的对象指针并将所有对象存储在一个向量中。函数是这样的:
vector<myClass*> myFunction (string fileName)
{
vector<myClass*> r;
myClass* obj;
ifstream infile(fileName);
string line;
int count = 0;
while (getline(infile, line))
{
obj = new myClass (count, line);
r.push_back(obj);
count++;
}
return r;
}
对于小的 *.txt 文件我没有问题。但是,有时我的 *.txt 文件包含超过 100 万行。在这些情况下,程序非常缓慢。你有什么建议可以让它更快吗?
【问题讨论】:
-
您阅读此文本文件的频率如何?启动时只有一次?该程序将运行多长时间?只是几秒钟或几分钟,或几小时甚至几天? “长时间”是相对的,取决于您执行“长时间”操作的次数,以及与运行时其余部分相比的时间。
-
您可以将较少的文件加载到内存中,并且只加载您需要的文件部分
-
另外,你用这些数据做什么?用例是什么?您需要一次阅读所有内容吗?您事先对文件中的条目数有任何想法吗?如果这样做,那么您可以为向量预分配内存吗?
-
我在启动时读取了一次文件。对于 100 万行的 txt 文件,将对象存储在向量中需要 15 分钟。问题是这只是一个更大的项目的一部分,15 分钟对我来说太长了。
-
像
wc(Linux/UNIX) 这样对文件进行一些琐碎的操作需要多长时间?你的 C++ 程序不应该比这慢得多....
标签: c++ object vector ifstream