std::ios::sync_with_stdio(false)的运用
c++中cin,cout效率比较低,是因为先把要输出的东西存入缓冲区与C语言中的stdio同步后,再输出,导致效率降低,而这段语句的作用是取消缓冲区同步,直接使用,由此可节省时间,使效率与scanf与printf相差无几。
但需要注意的一点是,因为取消与stdio的同步之后,就不建议再使用 printf 与 scanf了,否则实际输出就会与预期不符。只能用cin 与 cout
读入外挂
当遇到坑的题scanf都过不了的时候就用这个,不过这样的情况一般都是代码效率问题。
#include <bits/stdc++.h>
using namespace std;
inline int Scan() //inline为内联函数,目的是预处理,可减少时间
{int res = 0, ch, flag = 0;if((ch = getchar()) == '-') //判断正负flag = 1;else if(ch >= '0' && ch <= '9') //得到完整的数res = ch - '0';while((ch = getchar()) >= '0' && ch <= '9' )res = res * 10 + ch - '0';return flag ? -res : res;
}
int main()
{int n=Scan();printf("%d\n",n);
}
当然上面的也可以换成long long
类型的
cin的小技巧
ios::sync_with_stdio(false);
可以将cin和scanf的效率相匹敌。
详情说明:
scanf在Linux平台上测试结果为2.01秒
const int MAXN = 10000000; int numbers[MAXN]; void cin_read()
{ freopen("data.txt","r",stdin); for (int i=0;i<MAXN;i++) std::cin >> numbers[i];
}
cinLinux平台上测试结果为6.38秒
const int MAXN = 10000000; int numbers[MAXN]; void cin_read()
{ freopen("data.txt","r",stdin); for (int i=0;i<MAXN;i++) std::cin >> numbers[i];
}
cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);,这样就可以取消cin于stdin的同步了。
const int MAXN = 10000000; int numbers[MAXN]; void cin_read_nosync()
{ freopen("data.txt","r",stdin); std::ios::sync_with_stdio(false); for (int i=0;i<MAXN;i++) std::cin >> numbers[i];
}
std::ios::sync_with_stdio(false)的运用相关推荐
- 关于std::ios::sync_with_stdio(false)
std::ios::sync_with_stdio(false); 很多C++的初学者可能会被这个问题困扰,经常出现程序无故超时,最终发现问题处在cin和cout上,(甚至有些老oier也会被这个问题 ...
- C++ 里利用 std::ios::sync_with_stdio(false) 解决TLE问题
2018-1-23 关于用C++里面的cin读取数据,我们都知道它的速度相对于C里面的scanf是比较慢的... 首先,我随机生成了10000000个整数 #include<stdio.h> ...
- 解析 static auto x = []() { std::ios::sync_with_stdio(false);std::cin.tie(nullptr);return 0;}()
前言 这两天在LeetCode上刷题的时候看见有好几个速度排名第一的代码中都有一段类似的代码,如下: static const auto io_sync_off = []() {// turn off ...
- leetcode练习——数组篇(1)(std::ios::sync_with_stdio(false);std::cin.tie(nullptr);)
题号1. 两数之和: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...
- std::ios::sync_with_stdio(false);
这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步.如果你已经在头文件上用了using namespace std;那么就可以去掉前面的std::了.取消后就c ...
- 拾趣——ios::sync_with_stdio(false)详解(提高代码运算速度)
本篇文章核心意思:在编程时cin(cout)比scanf(printf)慢,在代码里加上ios::sync_with_stdio(false) 这个语句后,cin(cout)速度就会变得和scanf( ...
- C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)
leetcode练习时,总会发现运行时间短的代码都会有类似: static int x=[](){std::ios::sync_with_stdio(false);cin.tie(NULL);retu ...
- 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
原文地址:http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.ht ...
- 【C++】ios::sync_with_stdio(false) 与 cin.tie(nullptr) 加速 IO
目录&索引 一.前言 题目 二.ios::sync_with_stdio(false) 三.cin.tie(nullptr) 四.小结 一.前言 之前写题遇到大数据量(cin.cout 数据量 ...
最新文章
- mysql主主复制+keepalived 打造高可用mysql集群
- 机器学习(MACHINE LEARNING)MATLAB中微分方程的求解
- 001_ECharts入门
- 三、“涤纶纤维和棉纤维两组分纤维在涤/棉混纺织物燃烧过程中有着明显的物理相互作用和化学相互作用”,解释这两种作用。
- 限流神器Sentinel,不了解一下吗?
- python接口自动化(二十三)--unittest断言——上(详解)
- SQL 2005 字段备注获取
- 海信CAS计算机辅助手术系统,计算机辅助手术系统(CAS)
- 【记录】[2014.2.12]网新第一天
- POJ 1155 TELE 树形DP
- 通过编程方式在InfoPath 2010表单的下拉框修改事件中获取数据
- 模似html元素tilte提示
- 甲骨文裁员是在为云业务转型太慢埋单
- 思维导图c语言java区别_C语言基本数据类型的思维导图
- Tomcat运行成功但是报500错误
- WQ7033开发指南(按键篇)之4.3 三轴加速度传感器SC7A20驱动导入按键流程详解
- 文本框的左视图不见了?
- CountDownLatch,CyclicBarrier,Semaphore的使用方法以及它们之间的区别
- mysql数据库命中率_Oracle数据库关于命中率的查询语句总结
- Recovery HBOOT SPL RADIO APP2SD 金卡
热门文章
- 两篇同年硕士论文高度雷同!电子科技大学回应:启动调查!
- 专科生,还有未来吗?
- 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(下)——套接字
- java 生成折线图_jfree jsp java 生成折线图(详解带jar)
- mshflexgrid固定行对齐_放开那个空格键让我来,word对齐文字的四个方法
- linux oracle脚本编写,Linux 脚本编写基础(一)--语法
- 数据库事务处理差异:可提交读和重复读区别
- 2018年暑假第四次周赛-图论部分题解
- js jQuery取消添加超链接的方法小结
- telnet不能用,提示:-bash: telnet: command not found