我定义了一个这样的类:
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 万行。在这些情况下,程序会非常缓慢。你有什么建议可以让它更快吗?
首先,找到比标准流更快的 io。
其次,您可以使用字符串视图而不是字符串吗?它们是 C++17,但到处都有 C++11 和更早的版本。
第三,
myClass::myClass(int c, string n) {
count = c;
name = n;
}
应该读
myClass::myClass(int c, std::string n):
count(c),
name(std::move(n))
{}
这将对长名称产生影响。由于“小字符串优化”,没有短的。
第四,停止制作指针向量。创建值的向量。
第五,失败了,找到一种更有效的方法来分配/解除分配对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句