C++ 如何从文件中快速读取矩阵?

C++ 如何从文件中快速读取矩阵?,c++,C++,我在表格的文件中存储了数字: 12766 961 2595 19427 11518 9233 但是有40万台这样的电视机。如何从文件中快速读取它们 ifstream file_for_reading("C:\\Tests\\21"); short number_of_vertexes; int edge; file_for_reading >> number_of_vertexes >> edge; if (numbe

我在表格的文件中存储了数字:

12766 961 2595
19427 11518 9233
但是有40万台这样的电视机。如何从文件中快速读取它们

ifstream file_for_reading("C:\\Tests\\21");
    short number_of_vertexes;
    int edge;
    file_for_reading >> number_of_vertexes >> edge;
    if (number_of_vertexes < 1 || number_of_vertexes > 30000 || edge < 0 || edge>400000) { cout << "Correct your vallues"; exit(1); };
    int tmp = 0;
    short i;
    short** matrix = new short* [edge];
    for (tmp = 0; tmp < edge; tmp++)
        matrix[tmp] = new short[3];
    unsigned int first_vertex, second_vertex, edge_size;
    i = 0;
    while (!file_for_reading.eof()) {
        for (tmp = 0; tmp < edge; tmp++) {
            file_for_reading >> matrix[tmp][i] >> matrix[tmp][i + 1] >> matrix[tmp][i + 2];
            i = 0;
        }
    }
    for (tmp = 0; tmp < edge; tmp++) {
        for (i = 0; i < 3; i++) {
            cout << matrix[tmp][i] << " ";
        }
        cout << endl;
    }
    file_for_reading.close();
    //Dijkstra(matrix, 0, number_of_vertexes);
用于读取的ifstream文件(“C:\\Tests\\21”); 顶点数较短; 内缘; 用于读取的文件>>顶点数>>边; 如果(顶点数<1 | |顶点数>30000 | |边数<0 | |边数>400000){cout>matrix[tmp][i]>>matrix[tmp][i+1]>>matrix[tmp][i+2]; i=0; } } 对于(tmp=0;tmpcout如果您只想阅读和打印,此功能将有助于:

void readMatrix(int dimension, char *path, int *data)
{
    FILE *file;
    file = fopen(path, "r");
    if (file == NULL)
    {
        fprintf(stderr, "error: while trying to open `%s' for reading\n", path);
        return; //
    }

    for (int i = 0 ; ((i < dimension * dimension) && (fscanf(file, "%d ", &data[i]) == 1)) ; ++i)
        printf("data[%d] = %d\n", i, data[i]);

    fclose(file);
}
void readMatrix(整数维、字符*路径、整数*数据)
{
文件*文件;
file=fopen(路径“r”);
if(file==NULL)
{
fprintf(stderr,“错误:试图打开“%s”进行读取时\n”,路径);
返回//
}
对于(int i=0;((i
您需要定义“从文件中快速读取矩阵”对您意味着什么。 在什么计算机上,用什么操作系统,什么硬件

如果数据集每天编写一次,并且应用程序每天运行十几次,那么一种可能的方法是指定某种二进制格式(在某些书面文档中,使用符号,受规范启发),并将文本文件转换为二进制文件

在Linux上,您可以使用该二进制文件。另请参阅和。在Windows上,阅读关于

如果您使用C
函数,请注意。您希望(在2021年)具有至少64KB的I/O缓冲区(因为存在错误)

也可以考虑,如果允许,将文本文件转换为某种格式。C或C++代码生成器用于序列化和不序列化XDR数据。 另一种方法是将该数据集拆分为十几个较小的文本文件(例如,使用诸如或您自己的等效工具),并使用多线程方法(每个文件一个读取)

第三种方法将受到汇编程序的启发:第一个过程只解析行尾并存储它们的文件偏移量,第二个过程使用多个线程来解析文件的“段”

我个人的意见是,你应该基准,而不是麻烦。 对于SSD磁盘(2021年在典型的Linux桌面或服务器上),读取文本文件中以十进制编码的一百万个整数可能需要不到一秒钟的CPU时间


您还可以转换(或存储)将数据转换为一些or或数据库。

最好选择一种语言。您计划如何将数字存储在内存中?是否将文件转换为二进制文件是一个选项?什么可以快速转换为?您不能使用流运算符?您能添加您尝试过但发现性能不佳的内容吗?会有帮助。每行始终有三个整数吗您尝试过吗?使用您已经拒绝的解决方案给出答案是毫无意义的。当然,但您是如何做到的?请显示您的代码。文件中的集合数已知吗?Windows,SSD-512 GB,我用了6秒钟的时间使用fstream库从文件(1200000个元素)中读取此矩阵。Ehm我最近发现:“您还应该发布[X]”——如果问题没有足够的信息,那么还不应该回答。