2018-1-23

关于用C++里面的cin读取数据,我们都知道它的速度相对于C里面的scanf是比较慢的。。。

首先,我随机生成了10000000个整数

#include<stdio.h>
#include<stdlib.h>int main(){FILE *f=fopen("data.txt","w");for (int i=0;i<10000000;i++){fprintf (f,"%d ",rand());   }return 0;
}

然后我们用scanf进行读取,计算读取的时间

#include<stdio.h>
#include<stdlib.h>
#include<time.h>int main(){int start=clock();FILE *f=freopen("data.txt","r",stdin);for (int i=0;i<10000000;i++){int t;scanf("%d",&t);}printf("%.3lf\n",double(clock()-start)/CLOCKS_PER_SEC);retun 0;
}

结果为1.782,这是在windows下的Dev里面编译运行的,

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;int main(){int start=clock();FILE *f=freopen("data.txt","r",stdin);for (int i=0;i<10000000;i++){int t;std::cin>>t;}printf("%.3lf\n",double(clock()-start)/CLOCKS_PER_SEC);return 0;
}

这种情况下的结果为9.701,我们加上std::ios::sync_with_stdio(false)

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;int main(){int start=clock();FILE *f=freopen("data.txt","r",stdin);std::ios::sync_with_stdio(false);for (int i=0;i<10000000;i++){int t;std::cin>>t;}printf("%.3lf\n",double(clock()-start)/CLOCKS_PER_SEC);return 0;
}

变成了2.166,速度明显加快了不少。

cin慢是有原因的,其实默认的时候,cin与stdin总是保持同步的,也就是说这两种
方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混
用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,
如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false);
这样就可以取消cin于stdin的同步了。

C++ 里利用 std::ios::sync_with_stdio(false) 解决TLE问题相关推荐

  1. std::ios::sync_with_stdio(false)的运用

    c++中cin,cout效率比较低,是因为先把要输出的东西存入缓冲区与C语言中的stdio同步后,再输出,导致效率降低,而这段语句的作用是取消缓冲区同步,直接使用,由此可节省时间,使效率与scanf与 ...

  2. 关于std::ios::sync_with_stdio(false)

    std::ios::sync_with_stdio(false); 很多C++的初学者可能会被这个问题困扰,经常出现程序无故超时,最终发现问题处在cin和cout上,(甚至有些老oier也会被这个问题 ...

  3. 解析 static auto x = []() { std::ios::sync_with_stdio(false);std::cin.tie(nullptr);return 0;}()

    前言 这两天在LeetCode上刷题的时候看见有好几个速度排名第一的代码中都有一段类似的代码,如下: static const auto io_sync_off = []() {// turn off ...

  4. leetcode练习——数组篇(1)(std::ios::sync_with_stdio(false);std::cin.tie(nullptr);)

    题号1. 两数之和: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...

  5. std::ios::sync_with_stdio(false);

    这句语句是用来取消cin的同步,什么叫同步呢?就是iostream的缓冲跟stdio的同步.如果你已经在头文件上用了using namespace std;那么就可以去掉前面的std::了.取消后就c ...

  6. 拾趣——ios::sync_with_stdio(false)详解(提高代码运算速度)

    本篇文章核心意思:在编程时cin(cout)比scanf(printf)慢,在代码里加上ios::sync_with_stdio(false) 这个语句后,cin(cout)速度就会变得和scanf( ...

  7. 关于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 ...

  8. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)

    leetcode练习时,总会发现运行时间短的代码都会有类似: static int x=[](){std::ios::sync_with_stdio(false);cin.tie(NULL);retu ...

  9. 【C++】ios::sync_with_stdio(false) 与 cin.tie(nullptr) 加速 IO

    目录&索引 一.前言 题目 二.ios::sync_with_stdio(false) 三.cin.tie(nullptr) 四.小结 一.前言 之前写题遇到大数据量(cin.cout 数据量 ...

最新文章

  1. echarts datazoom 显示的位置设置
  2. 我们与Datawhale的故事!
  3. 生产系统遇到的问题:producers blocked
  4. 基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
  5. 贪心算法之高级钟点秘书会议安排问题
  6. Java8————方法引用
  7. 安装JDK以及配置Java运行环境
  8. Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理
  9. python 弧度与角度互转
  10. css 如何让盒子垂直居中,css 盒子垂直居中
  11. 通过web前端实现水印制作
  12. 现代教育技术没有计算机基础知识教程,浅析现代教育技术在专科计算机基础课教学中的应用...
  13. VMware下载与安装教程(详细)
  14. C语言I——作业10
  15. TFT和STN液晶区别
  16. 安卓开发个人小作品(1) - 有声计算器
  17. cadence 通孔焊盘_【精品】PCB设计软件allegro不规则带通孔焊盘的制作
  18. GUNS框架图片上传详解
  19. 分类算法SVM(支持向量机)
  20. 第十三章 失业、通货膨胀和经济周期

热门文章

  1. Intel Realsense d435 使用python对深度图进行预处理
  2. maftools|TCGA肿瘤突变数据的汇总,分析和可视化
  3. C/C++传递二维数组[转载]
  4. Animation Studio插件怎么用?Nitrozme Animation Studio Packages Mac(AE插件拓展包) 安装教程
  5. 2.3 基本算法之递归变递推 放苹果 python
  6. 电脑同时安装python2和3_一台电脑上同时安装python2和python3
  7. 树莓派 | threading01 - 创建两个子线程同时运行,两个线程各负责控制一个LED灯以不同的频率闪烁
  8. Java笔记-重写JsonSerializer中serialize方法使Json中时间戳/1000
  9. Qt文档阅读笔记-Text QML Type官方解析及实例
  10. Qt工作笔记-线程池作用之一:限制系统中执行线程的数量