我只是想知道如何在不使用 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( ):
printf( ) 受到在终端上物理(电子方式?)放置字符所需的大量时间的限制。您可以通过使用 sprintf() 首先将输出字符写入数组来加快速度;然后使用 printf( ) 将数组发送到 tty。 printf() 无论如何都会缓冲行,但使用大型多行输出数组可以克服每行发生的设置延迟。
printf( ) 格式化只是其开销的一小部分。您可以确信编写此库函数的人们已尽最大努力使其尽可能快。而且,在 printf() 出现的四十年里,许多其他人已经对其进行了无数次的修改和重写以提高速度。无论您多么努力地完成 printf( ) 负责的格式化工作,您都不可能比他们的努力有多大改进。
scanf( ) 延迟和开销是类似的。
你的努力是崇高的,但我不相信它能得到返回。
关于c++ - 比 scanf 和 printf 扫描和打印整数更有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647483/