(acm)C++加速输入的几种方法
1.C++IO流的同步和绑定
在C++
中,cin
和cout
的速度其实不并不慢,C++
中的流的IO速度相当的快,其速度与初始设定的缓存区大小和硬盘的IO速度有关。
但在C++
中,为了兼容C
的IO(scanf
和printf
),cin
和cout
被设置为与C的IO同步,这样导致cin
和cout
的速度不如scanf
和printf
快。
另外,在默认情况下,标准输入设备(cin
)与标准输出设备(cout
)绑定在一起,它保证在调用输入之前已经刷新输出缓冲区,这样也会降低读取效率。
所以,我们可以手动取消他们与C语言IO的同步,并去掉cin
和cout
的绑定,加速读取,使cin
的速度与scanf
相差无几,甚至某些情况要快于scanf
。
注:在取消绑定后,使用scanf
和printf
可能会出现问题,比如读取失败或者提前输出的问题,请不要再使用他们,不过可以使用getchar
和gets
等读入函数。
加速代码:
// 取消C++ IO与C的同步
|
|
std::ios::sync_with_stdio(false);
|
|
// 取消cin和cout的绑定
|
|
std::cin.tie(NULL);/*等价于cin.tie(0);*/
|
2. 快读挂
在读取大量整数时,无论是cin
还是scanf
,都比getchar
的读取效率要慢上不少,我们可以使用getchar
来模拟输入函数,在读取大量整数的时候效率会很高:
下面给出其中的一种实现方法:
inline void read(int& x) {
|
|
x = 0;
|
|
char c;
|
|
for (c = getchar(); c < '0' || c > '9'; c = getchar())
|
|
;
|
|
for (; c >= '0' && c <= '9'; c = getchar())
|
|
x = (x << 3) + (x << 1) + c - '0';
|
|
}
|
3.交互式oj(如leetcode)的加速方法
将其放在solution
类的上方即可,一般情况用不到。
static auto __=[](){
|
|
std::ios::sync_with_stdio(false);
|
|
cin.tie(nullptr);
|
|
return nullptr;
|
|
}();
|
|
//注意放在solution上面
|
(acm)C++加速输入的几种方法相关推荐
- python键盘输入数组_python 二维数组切割Python读取键盘输入的2种方法
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1.raw_input 2.input raw_input函数raw_input() 函数从标准输入读取一个行,并返 ...
- java中像scanf一样多个输入_VB模拟键盘输入的N种方法
VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...
- 人民币符号输入的几种方法
人民币符号输入的几种方法 直接利用键盘输入 ¥ shift+4 (键盘第二行数字,中文输入法) ¥ Alt+41892 (右侧小键盘数字,GBK,全角) ¥ Alt+0165 (右侧小键盘数字,Uni ...
- python二维数组换行输出_python 二维数组切割Python读取键盘输入的2种方法
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1.raw_input 2.input raw_input函数raw_input() 函数从标准输入读取一个行,并返 ...
- java中从键盘输入的三种方法以及Console输入
java中从键盘输入的三种方法: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...
- Java 键盘输入的三种方法
Java 键盘输入的三种方法 1.System.in和System.out方法:从控制台接收一个字符,然后将其打印出来 虽然此方式实现了从键盘获取输入的字符,但是System.out.read()只能 ...
- java数据输入的步骤_Java学习日志1.4 Scanner 数据输入的三种方法
Scanner sc = new Scanner(System.in); /注意in 是InputStream的缩写,是字节输入流的意思. 整句话的含义就是: new 一个对象,接受从键盘输入的数据, ...
- Java | Java语言在Eclipse控制台输入的三种方法
写在前面的内容,java控制台输入浅尝辄止即可 >>> 文章目录 三种方法比较一览图 方法一:in/out public static final InputStream in//静 ...
- n76e003引脚图_N76E003 复位引脚(P20)配置为输入的两种方法
由于N76E003管脚比较少,17个标准通用管脚,另外还有一个只能做输入的引脚(RESET),在项目中就可能需要用到RESET引脚作为输入,那么问题来了,怎么配置RESET引脚当作输入呢?这里介绍两种 ...
最新文章
- android apk签名工具_关于keytool和jarsigner工具签名的使用小结
- 06. 为知笔记 -- 我的修改
- P3701 -「伪模板」主席树【网络流,最大流】
- 位置服务器管理器,查看 DIMM 位置
- 原生Js 两种方法实现页面关键字高亮显示
- vmware安装centos问题
- 上下伸缩代码_CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)
- python网络爬虫 抓取金融分析师名单
- 金融数据分析与挖掘实战练习-1.9
- Spring Cloud 服务消费者 Feign (三)
- 存储过程与SQL语句如何选择
- 专家显身支招 教你如何选购高品质DDR2内存(例)
- 最新ECSHOP解闷商城系统+休闲娱乐EC购物商城源码
- 2015061403 - firebug下载地址
- zemax---System Explorer(系统选项)
- VBlog项目代码理解之前后端交互
- 移动端cpu天梯图2020_笔记本CPU排行天梯图2020
- android 实现ble蓝牙自动配对连接
- 有你智居告诉你,智能门禁是如何做到出入小区只需1秒钟的?
- win10彻底关闭windows defender的两种方法
热门文章
- java 页面输出一个页面_java学习之:一个完整页面输出信息的过程(以输出Doctor表中信息为例)...
- C++中正确使用PRId64
- 透析WINCE的控制面板
- java utf8 byte_byte以及UTF-8的转码规则
- 海量数据持久层解决方案_爱数AnyBackup重磅发布海量非结构化数据超可用解决方案...
- java游戏服务器面试_我做游戏开发这八年
- php的cookie变量作用,PHP语言中cookie的作用
- arcgis坡度结果有误或z因子前有感叹号
- Windows Workflow Foundation(WWF)介绍
- php源码查找替换,php 替换模板中的 PHP源码标签字符方法