c++ - 比 scanf 和 printf 扫描和打印整数更有效的方法

标签 c++ c

我只是想知道如何在不使用 scanf/printf/cin/cout 的情况下读取整数(从标准输入)和写入整数(在标准输出上),因为它们太慢了。 谁能告诉我如何使用 fread 和 fwrite 来达到此目的?我对缓冲等只了解一点点。 我想要以下两个代码的替代品->

[1]

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

[2]

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

任何其他有效的方法都值得赞赏。提前致谢!!

最佳答案

我建议您在错误的地方寻找提高速度的方法。让我们只看一下 printf( ):

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

  2. printf( ) 格式化只是其开销的一小部分。您可以确信编写此库函数的人们已尽最大努力使其尽可能快。而且,在 printf() 出现的四十年里,许多其他人已经对其进行了无数次的修改和重写以提高速度。无论您多么努力地完成 printf( ) 负责的格式化工作,您都不可能比他们的努力有多大改进。

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

你的努力是崇高的,但我不相信它能得到返回。

关于c++ - 比 scanf 和 printf 扫描和打印整数更有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647483/

相关文章:

C++ 文本文件不会保存在 Unicode 中,它一直保存在 ANSI 中

c++ - 为什么这个循环只运行一次?

c - 使用 malloc 创建的结构体设置值的段错误

c - 在memcached中存储指针

c++ - 双分派(dispatch)和工厂模式

c++ - FFmpeg - RTCP BYE 数据包

c++ - 是否可以仅从普通 C 或普通 C++ 控制屏幕上的像素而无需任何 opengl/directx 麻烦?

c - numactl --physcpubind

c - 逐个字符地构建字符串

c++ - 命名空间、 header 和对象的层次结构