sync_with_stdio和cin.tie(0); cout.tie(0);

sync_with_stdio

这个函数是一个“是否兼容stdio”的开关,C++为了兼容C,保证程序在使用了std::printf和std::cout的时候不发生混乱,将输出流绑到了一起。

应用

在ACM里,经常出现数据集超大造成 cin TLE的情况。这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论。其实像上文所说,这只是C++为了兼容而采取的保守措施。我们可以在IO之前将stdio解除绑定,这样做了之后要注意不要同时混用cout和printf之类。

在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。

ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);

原来而cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几.

参考来源:

原文地址:https://www.cnblogs.com/xwh-blogs/p/12602671.html

时间: 2024-11-05 16:03:23

sync_with_stdio和cin.tie(0); cout.tie(0);的相关文章

[黑科技]市面上不太常见的cin挂和cout挂

CCPC赛后摸鱼搞了个新的奇怪外挂 这里贴上利用sgetn和sputn来实现的读入读出挂,理论上比fread更优 期望在赛中TLE的代码能强行卡过去hhh 利用小规模的Codeforces - 1036D进行测试 96ms version #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k;i++) #define rrep(i,j,k) for(int i=j;i>=k;i--) #define println(

C++中减去‘0’的作用( -&#39;0&#39; )

我们在日常研(chao)究(xi)大佬们的代码时,可能会遇到减去字符'0'的情况,比如下图,这种语法问题吧说简单它不那么简单,毕竟不好理解:但说难吧也不难,其实就是让代码更简洁更有逼格的途径而已. 说了那么多屁话那么这个减去零到底是干啥的呢? 它的作用就是减去0的ASCII值:48.可以方便的用来转换大小写或者数字和和字符.比如我们可以写这么一个函数: #include <cstdio> #include <iostream> using namespace std; int ch

题目1053:互换最大最小数------------------------max,m1=0,min,m2=0;这几个值定义的地方决定是否能ac

#include<iostream> using namespace std; int a[20]; int main() { int n; while(cin>>n) { int i,j,max,m1=0,min,m2=0;//如果将这几个值得定义写在while的上面,就会出错. for(i=0;i<n;i++) cin>>a[i]; max=a[0]; min=a[0]; for(i=0;i<n;i++) { if(max<a[i]) { max=

字符加上&#39;0&#39;等于ascii码值48, 不加引号0等于数值0

'\0'不是指ASCII码值, 它是字符, 它的ASCII码值是0 '\0'==0 0 数字 48 空格 ASCII码值是32 main() { char a='\0'; if(a==0) printf("A ASCII is 0\n"); if(a==' ') printf("A is space\n"); printf("*%c*\n",a); getch(); } 单引号是字符 双引号是字符串 什么都不加是数字 加单引号的表示字符零,即ch

空暇时候思考2(&amp;#39;\0&amp;#39;等价于数字0还是字符0)

/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 6 7 * *******************************************************************

空闲时候思考2(&#39;\0&#39;等价于数字0还是字符0)

/********************************************************************** * * Copyright (c)2015,WK Studios * * Filename: A.h * * Compiler: GCC vc 6.0 * * Author:WK * * Time: 2015 6 7 * *******************************************************************

NVIDIA DIGITS 学习笔记(NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0)

转自:http://blog.csdn.net/enjoyyl/article/details/47397505?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1 NVIDIA DIGITS-2.0 + Ubuntu 14.04 + CUDA 7.0 + cuDNN 7.0 + Caffe 0.13.0环境配置 引言 DIGITS简介 DIGITS特性 资源信息 说明 DIGI

REFORM-3PC.V7.0+FRNC-5PC.V8.0

Bentley.WaterGEMS.V8i.SS5.08.11.05.61 1CD 给水管网建模 REFORM-3PC.V7.0 FRNC-5PC.V8.0 通用加热炉工艺计算软件 REFORM-3PC 烃类蒸汽转化炉的炉膛截面评级程序Steam Hydrocarbon Reforming Simulation Program Chasm.Ventsim.Visual.Premium.v3.8.2.9.build.10.06.2014.Win32_64 1CD Bentley.AutoPIPE.

malloc创建三维数组,f[0],f[i][0],f[i][j][0]记录每维总数

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 5 int main() 6 { 7 //f[0],f[][0]记录总数 8 //etc.有f[0]种等级的房间,f[i]代表第i种等级 9 //第i个等级的房间有f[i][0]间房间,f[i][j]代表第i种等级的第j个房间 10 //第f[i][j]个房间有f[i][j][0]张床 11 //f[i][j][k]为第i个等级的房间,第