我编写了将文件读取为矢量的代码。 但这太慢了(读取120000行需要12秒) 我的代码有什么问题? 当我在C#中执行相同的操作时,只需0.5到1秒钟。
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
bool getFileContent(string fileName, vector<string> &vecOfStrs)
{
ifstream in(fileName.c_str());
if (!in)
{
std::cerr << "Cannot open the File : " << fileName << std::endl;
return false;
}
string str;
while (getline(in, str))
{
if (str.size() > 0)
{
vecOfStrs.push_back(str);
}
}
in.close();
return true;
}
int main()
{
string my_file_path = "C:/Users/user/Desktop/myfile.txt";
vector<string> lines;
bool result = getFileContent(my_file_path, lines);
if (result)
{
cout << lines.capacity() << endl;
}
}
答案 0 :(得分:3)
我假设您正在使用Visual Studio开发应用程序。 为“ O / O2优化”执行以下步骤
1>项目属性->配置属性-> C / C ++->代码生成->基本运行时检查=默认
2>项目属性->配置属性-> C / C ++->优化->优化=最大优化(最快速度)(/ O2)
这将使您的程序在运行时得到最大程度的优化。 如果仍然不好,我认为您应该使用此链接计算文件中的行数 How to count lines of a file in C++?
并保留此数字作为初始向量的容量。
希望它可以解决您的问题。这是我的解决方法
ifstream in("result_v2.txt");
vector<string> lines;
string str;
while (std::getline(in, str))
{
if (str.size() > 0)
{
lines.push_back(str);
}
}
in.close();