C++,读取和保存大量数字

标签 c++ arrays numbers save

我必须解决一个问题,需要你的帮助,所以提前致谢。正如你所看到的,标题几乎说明了一切。有一个文件“domes.in”(这是一个文本文件),其中包含 10.000.000 对整数 From (1 - 100.000),所以在第一部分中,我必须在不到 1 秒的时间内保存所有这些数字.

首先,我尝试创建一个 20.000.000 个位置的 int 数组,以便我可以将数字一一保存。数组的大小太大,导致程序没有响应。

在阅读代码之前,请先阅读任务,但请只回答我的问题,不要发布任何代码,因为这是一个在线竞赛的问题,我想自己写。

#include <fstream>
using namespace std;

int main()
{
    int n, m, a, b;        //N(Value)    M(Pairs)
    int t = 0;
    int r = 0;
    int j;

    ifstream infile("domes.in");
    infile >> n >> m;     //N = 100.000    M = 10.000.000
    int domes[m*2];

    for (j=0; j<m; j++)      //For 1 to 10.000.000
    {
        infile >> a >> b;    //Save 10.000.000 Integers
        domes[t++] = a;
        domes[t++] = b;
    }
    for (j=1; j<=n; j++)          //For J = 1 - 100.000
    {
        int i=0;
        for (int k=0; k<t; k++)   //If the point J is appeared 
            if (domes[k] == j)    //+1 Link
                i++;

        if (i == 1)               //If Links < 2  (of number J)
            r++;                  //+1 Point is connected with less than 2 points
    }                             //Else move on to ++J
    infile.close();

    ofstream outfile("domes.out");
    outfile << r;
    return 0;
}

现在看来它可能有效,但程序再次没有响应(在运行时,in 引发一个错误,表明程序停止运行。代码中存在任何其他构建错误或错误)。

我做错了什么?

文本文件: 100000 10000000

2344 3444

3345 4564

5566 9455//最大 100.000 的随机整数

//............

//编辑:我从代码中删除了结构“DOMES”,因为它是同一件事

任务:我会用自己的话解释它,因为它很复杂。 map 上有 100.000 个点。这些点是相连的(有 10.000.000 个链接)。我必须找到只有一个连接的点(每个点至少有 1 个连接)。

例如:

5 4(N = 5,M = 4)N(最大值)M(对)

1 2

2 3

4 5

3 4

有 2 个点具有单个连接:1 和 5(1 与 2 连接)和(5 与 4 连接)。其余点至少连接两次:

2:1-2、2-3

3:2-3、3-4

4:4-3、4-5

最佳答案

当涉及大数据的 I/O 时,C++ 流比它们的 C 亲戚慢。我相信你可以用 fopen() 加快写作速度和fwrite()来自<cstdio>很多。通过这样做,您可以一次性写入整个数组,并且可能不会出现崩溃问题。

关于C++,读取和保存大量数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801888/

相关文章:

c++ - 我在 Visual Studio 2012 Pro 中有一个 C++ DLL 类型的项目,但我无法将其编译为 CLR - 为什么会这样?

c++ - 使用 IXMLHTTPRequest2 流式传输时如何在 Windows 8 上禁用缓存?

c++ - 利用 max_element?

arrays - 将数据从设备复制到主机时出现无效的参数错误

javascript - 使用 lodash 或 underscorejs 查找数组字段总和

javascript - 如何从父数组创建新数组?

c - 对固定大小为 25 的 float 数组进行合并排序(C 编程语言)

c++ - 有效地移动整个内存块

python - 如何在 Python 3 中生成 0 到无穷大之间的 N 个随机数

javascript - jquery 以零开头的数字问题