如何将大文件读入向量或数组

时间:2019-02-02 02:29:49

标签: c++

我编写了将文件读取为矢量的代码。 但这太慢了(读取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;
    }
}

1 个答案:

答案 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();