scanf、cin及其优化、快读性能测试

scanf,cin · 浏览次数 : 49

正文

为了让大家了解C++各种IO方式的性能,于是就有了这篇文章。

本次测试采取的数据均为 \(10^6\) 个不超过 \(10^8\) 随机正整数。

image

测试代码

#include<bits/stdc++.h>
using namespace std;
int x;
int main(){
	freopen("test.in","r",stdin);
	freopen("test.out","w",stdout);
	double s=clock();//记录开始时间
	for(int i=1;i<=1000000;i++){
		//测试内容 
	}
	cerr<<clock()-s<<"\n";//在终端输出运行时间
	return 0;
}

输入测试

scanf

image

\(328\) 毫秒

无优化cin

image

\(577\) 毫秒

优化后cin

image

\(81\) 毫秒

快读(不考虑负数)

image

\(155\) 毫秒

输出测试

输出每一个数后换行

printf

image

\(989\) 毫秒

无优化cout(endl)

image

\(1447\) 毫秒

优化后cout(endl)

image

\(1386\) 毫秒

无优化cout(\n)

image

\(61\) 毫秒

优化后cout(\n)

image

\(73\) 毫秒

快写

image

\(105\) 毫秒

总结

输入

如果不想关闭读写同步的话就用快读,总之不要用原生的 cinscanf 处于中立。

输出

快写的优化作用比快读小得多,几乎没有。

正常的 printf 足够。

endl 换行的 cin 慢的要死,打死也不要用。

建议用 \n 换行,优化不重要。

综上所述,不关闭读写同步建议用快读+ \(\texttt{cout}\)(\n换行),关闭读写同步就无脑 cin/cout。

与scanf、cin及其优化、快读性能测试相似的内容:

scanf、cin及其优化、快读性能测试

为了让大家了解C++各种IO方式的性能,于是就有了这篇文章。 本次测试采取的数据均为 \(10^6\) 个不超过 \(10^8\) 随机正整数。 测试代码: #include using namespace std; int x; int main(){ freopen

__int1024!

使用说明: 数据范围约为\(-2^{1024}\le N \le2^{1024}\),反映到十进制约为\(-10^{309}\le N \le10^{309}\),但不保证完全如此。 输入输出使用自带的输入及输出函数。由于其内部用scanf和printf来实现,所以请不要把它与ios::sync_w

C 语言中的 sscanf 详解

一、函数介绍 函数原型:int sscanf(const char *str, const char *format, ...); 返 回 值:成功返回匹配成功的模式个数,失败返回 -1。 RETURN VALUE These functions return the number of input

[转帖]Redis SCAN命令详解

https://www.jb51.net/article/257083.htm 处理一下.. SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程,这篇文章给大家介绍了Red

[转帖]一次 Scan 竟耗时上百秒?Redis Scan 原理解析与踩坑

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/redis/redis-scan/主要分析了 Redis Scan 命令基本使用和具体实现,包括Count 参数与 Scan 总耗时的关系,以及核心的逆二进制迭代算法分析

[转帖]Redis Scan 原理解析与踩坑

https://www.lixueduan.com/posts/redis/redis-scan/ 主要分析了 Redis Scan 命令基本使用和具体实现,包括 Count 参数与 Scan 总耗时的关系,以及核心的逆二进制迭代算法分析。 1. 概述 由于 Redis 是单线程在处理用户的命令,而

[转帖]Redis Scan 原理解析与踩坑

https://www.cnblogs.com/jelly12345/p/16424080.html 1. 概述由于 Redis 是单线程在处理用户的命令,而 Keys 命令会一次性遍历所有 Key,于是在 命令执行过程中,无法执行其他命令。这就导致如果 Redis 中的 key 比较多,那么 Ke

Redis scan等命令的学习与研究

Redis scan等命令的学习与研究 摘要 背景跟前几天说的一个问题类似. 为了验证自己的设想, 所以晚上继续写脚本进行了一轮次的验证. 不过上次讨论时,打击好像都没听懂我说的 所以这次准备从基础开始讲起. 很多好东西在上来量之后可能会变成坏东西 scan 命令 Redis 在2.8 之后增加了s

[转帖]redis中keys与scan命令的区别有哪些

https://www.yisu.com/zixun/445908.html 这篇文章将为大家详细讲解有关redis中keys与scan命令的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 redis keys和scan的区别 redis的keys命令,

[转帖]深入理解Redis的scan命令

熟悉Redis的人都知道,它是单线程的。因此在使用一些时间复杂度为O(N)的命令时要非常谨慎。可能一不小心就会阻塞进程,导致Redis出现卡顿。 有时,我们需要针对符合条件的一部分命令进行操作,比如删除以test_开头的key。那么怎么获取到这些key呢?在Redis2.8版本之前,我们可以使用ke