比scanf和printf更有效的扫描和打印整数方式

Abh*_*han 2 c c++

我只想知道如何在不使用scanf/printf/cin/cout的情况下读取整数(来自stdin)和写入整数(在stdout上),因为它们太慢了.谁能告诉我fread和fwrite如何用于此目的?我只知道一点关于缓冲等等.我想替换以下两个代码 - >

[1]

    long i , a[1000000];
    for(i=0;i<=999999;i++)
           scanf("%ld",&a[i]);
Run Code Online (Sandbox Code Playgroud)

[2]

    for(i=0;i<=999999;i++)
           printf("%ld\n",a[i]);
Run Code Online (Sandbox Code Playgroud)

任何其他有效的方法表示赞赏.提前致谢!!

Pet*_*son 5

我建议你在错误的地方寻找提速.我们来看看printf():

  1. printf()受到物理上(电子地)将字符放在终端上所花费的大量时间的限制.你可以通过使用sprintf()首先将输出字符写入数组来加快速度.然后使用printf()将数组发送到tty.无论如何,printf()缓冲行,但使用大型多行输出数组可以克服每行发生的设置延迟.

  2. printf()格式化是其开销的一小部分.你可以肯定那些编写这个库函数的人尽力做到尽可能快.而且,在四十年,使的printf()已经出现,许多人都在努力,并改写它几无数次,加快速度.无论你如何努力去做printf()处理的格式化,你都不可能在他们的努力上做出很大的改进.

scanf()延迟和开销是类似的.

你的是一种高尚的努力,我不相信它能够得到回报.