zoukankan      html  css  js  c++  java
  • 关于ios::sync_with_stdio(false)的一些问题

    使用ios::sync_with_stdio(false)可以让cin读入的更快,它的原理是使本该同步的输入输出流分开,就是让c风格的输入输出流和c++的输入输出流分开。

    举一个具体的例子,在正常c++中,当我们用cin输入整数,当我们在键盘上输入的时候,我们输入的东西进到了缓冲区,假设我们输入了

    6 3

    两个数之间有空格,最后有回车

    这些东西都进入了缓冲区,然后cin从缓冲区中读取这些字符,cin会一直读取到空格或者回车,第一个cin读到6,6之后的空格没有读,还在缓冲区中,接下来第二个cin会忽略掉空格,读取了3,在读到回车前结束,这时候缓冲区中还有个回车,如果接下来我们想用gets来读取字符串,那么gets会读到回车后结束,因为这时候缓冲区中正好就有个回车,所以gets会直接读到那个回车,然后结束读入,所以我们输入的字符并没有被gets读到,一般这个时候都会再定义一个字符c来吃掉回车。

    如果这时候,我们在前边写了ios::sync_with_stdio(false)那么c的缓冲区和c++的缓冲区就会分开,还是进行和刚才同样的操作的话,这时候cin后的回车停留在了c++的缓冲区中,而gets是c函数,所以这时候gets是从c的缓冲区中读入字符,而这时c的缓冲区什么也没有,所以gets就等待输入,所以我们就把字符输入进了gets,而并没有用到用来吃掉回车的字符。

  • 相关阅读:
    Zabbix安装部署
    设计模式目录导航
    [内排序]八大经典排序合集
    SpringBoot集成基于tobato的fastdfs-client实现文件上传下载和删除
    Docker部署FastDFS(附示例代码)
    Docker部署Portainer搭建轻量级可视化管理UI
    Maven基础知识详解
    SpringBoot整合Swagger2详细教程
    screw一键生成数据库文档
    SpringBoot + Mybatis-Plus 实现多数据源简单示例
  • 原文地址:https://www.cnblogs.com/fate-/p/13393892.html
Copyright © 2011-2022 走看看