当前位置: 首页 > news >正文

深圳服务好的网站建设软件推广平台有哪些

深圳服务好的网站建设,软件推广平台有哪些,仿站建站教程,wordpress 顶踩插件目录 背景导入 问题 1.1ios::sync_with_stdio(false) 1.2为什么要解除C/C IO流同步? 1.3使用场景 2.1cin和cout的绑定关系 2.2为什么要解除绑定关系? 2.3注意事项 背景导入 大家可以先看一下这段背景知识;后面我会谈谈自己的理解; 1.在C中,标准输⼊输出流…

目录

背景导入

问题

1.1ios::sync_with_stdio(false)

1.2为什么要解除C++/C IO流同步?

1.3使用场景

2.1cin和cout的绑定关系

2.2为什么要解除绑定关系?

2.3注意事项


背景导入

大家可以先看一下这段背景知识;后面我会谈谈自己的理解;

1.在C++中,标准输⼊输出流如 cin 和 中,标准输⼊输出函数如 cout 是由C++的标准库提供的;⽽在C语⾔ scanf 和 printf 是由C标准库提供的。由于C++是从C 发展⽽来的语⾔,C++标准库的输⼊输出流系统需要与C标准库的输⼊输出系统兼容,以 确保在同⼀程序中能够混合使⽤C和C++的输⼊输出函数。为了实现这种兼容性,C++ 标准库默认会将 cin 、 cout 等C++流对象与stdin 、 stdout 等C标准库的流对象同步在⼀起。这种同步操作意味着每次使⽤cin 或 cout 时,都会⾃动刷新C标准库的缓冲区,以确保C++和C的I/O是⼀致的;

2.在默认情况下, cin和cout 之间存在⼀种绑定关系。这种绑定意味着,每当从cin 读取数据时,任何之前通过cout 输出的内容都会被强制刷新到屏幕上。这个机 制保证了输出内容能够⽴即显⽰给⽤⼾,这对于交互式程序⾮常有⽤。但是,这种绑定也 可能导致性能问题,特别是在需要频繁读取⼤量数据的情况下。这是因为每次从 cin 读 取数据都会触发⼀次输出缓冲区的刷新,即使实际上没有进⾏输出操作,也会浪费时间。

问题

1.ios::sync_with_stdio(true/false)是什么?
2.cin/cout的tie(绑定关系)是什么?
3.为什么要解除cin/cout的绑定关系?
4.为什么要取消C++和C的缓冲区同步?

1.1ios::sync_with_stdio(false)

我们都知道C++是从C语言发展过来的,我们还知道在.cpp文件中是可以同时使用C++和C的IO流的,也就是cin/scanf,cout/printf是可以混合着用的;二者的IO是兼容的;都是共享的同一块缓冲区;

而于此相关的表示同步关系开关的代码语句就是"ios::sync_with_stdio",我们平时使用的cin其实是istream的一个对象,cout是ostream的一个对象;
而ios就是iostream的一个基类;sync的意思是"同步",with_stdio就很明显了,就是与C的IO流同步;说到这里可能还不够清楚,没关系,下面会讲到他的真正作用;

ios::sync_with_stdio的真正作用就是在使用另外一方的IO流时刷新缓冲区;

举个例子:(这一块由于编译器的优化,无法使用代码验证)

我们都知道缓冲区是只有等到满了或者遇到回车或程序结束的时候才会自动刷新的,缓冲区刷新的表现就是将其内容打印到屏幕上;

 如果我没有打开IO同步的话,那我在从C++的IO流切换到C的IO流的时候是不会强制刷新缓冲区的;

如图:我先使用cout了,此时在执行scanf之前缓冲区里是有hello world一个字符串的;由于我没有打开同步,所以我在执行scanf语句的时候屏幕上是不会打印hello world的;因为缓冲区没有刷新嘛;

如果我打开了IO同步,那么在执行scanf的时候,就会强制的把缓冲区刷新一遍,因为我要使用C的IO流了,C++在缓冲区中输入的内容要清理掉;这个时候的运行结果就会先显示hello world,然后让你输入变量X;

由于这块编译器做了优化,所以是否解除同步,运行结果都一样,不方便验证;

1.2为什么要解除C++/C IO流同步?

正是因为每次切换IO,都要刷新一下缓冲区,如果数据量很大,程序员又经常性的切换IO,即使缓冲区没有任何内容,依旧会自动的刷新缓冲区,这就很浪费时间了;

如果我们解除了同步关系;这个缓冲区就暂时性的归属于一方;那么我们就最好不要交叉使用了;否则会造成一些不必要的麻烦;

1.3使用场景

竞赛编程:在处理⼤量输⼊输出的竞赛环境中,这种优化⾮常常⻅,因为它可以显著减少I/O操作 的时间。

• 只使⽤C++I/O:如果你的程序只使⽤ cin 、 cout 进⾏I/O,⽽不涉及C的I/O函数,那么可 以安全地使⽤这项优化来提⾼性能。

2.1cin和cout的绑定关系

前面我们讲了C++和C的IO切换会强制刷新缓冲区,这是C++的IO和C的IO的同步关系;而cin和cout也有同步关系,由于他们都是C++的IO,所以更准确的叫法是绑定;

他们之间的关系同样是作用在缓冲区上;

cin.tie(0) 是C++中⽤于解除标准输⼊流 在C++中, cin 是 cin 与标准输出流 istream 类型的流对象, cout 之间默认绑定的⼀个⽅法。 cout 是 ostream 类型的流对象,分别⽤于标准输 ⼊和标准输出。

 在默认情况下, cin 和 时,任何之前通过 cout 之间存在⼀种绑定关系。这种绑定意味着,每当从 cin 读取数据 cout 输出的内容都会被强制刷新到屏幕上。这个机制保证了输出内容能够⽴即显 ⽰给⽤⼾,这对于交互式程序⾮常有⽤。但是,这种绑定也可能导致性能问题,特别是在需要频繁读 取⼤量数据的情况下。这是因为每次从 cin 读取数据都会触发⼀次输出缓冲区的刷新,即使实际上 没有进⾏输出操作,也会浪费时间

 这里我简单举个例子

 默认状态下cin和cout是绑定了的,我使用cout,缓冲区中存有hello world,没有回车,缓冲区不会自动刷新.运行结果会先打印hello world然后在让我们输入x的值;

如果我们没有绑定cin和cout,那执行cin之前就不会强制刷新缓冲区,运行结果就应该是先让你输入X,输入完回车后再打印hello world; 

2.2为什么要解除绑定关系?

这里与上面的同步解释是一样的,如果缓冲区没有内容遇到cin,就会强制刷新缓冲区,有时完全没有必要,为了提高效率,通常采用解除绑定的方法;

如果是非交互式的程序,那就可以不解除;因为交互式程序需要给用户提示等...

如果是在ACM等竞赛中,那么往往都是需要解除绑定的;

2.3注意事项

如果我们解除了cin/cout的绑定关系,cin是不会强制刷新缓冲区的,有时候我们在输入数据之前,需要前面的提示;这个时候我们就需要使用cout.flush或者cout<<endl手动刷新缓冲区;

http://www.ds6.com.cn/news/122695.html

相关文章:

  • 工程公司资质等级seo国外推广软件
  • 国际新闻界期刊网站关键词优化方法
  • 临夏市做网站电话电商关键词查询工具
  • 高青网站建设yx718百度引擎的搜索方式是什么
  • wordpress访问3秒以上seo流程
  • 做网站时怎么选择数据库类型关键词歌词图片
  • 怎么通过淘宝优惠券做网站赚钱企业网站制作与维护
  • 网站的空间什么意思如何自己建个网站
  • 做网站教程 第一课磁力链
  • 旅游在线网站开发网站的推广方式
  • 没有网站也可以做cpaandroid优化大师
  • 网站建设中html网页自媒体发布平台
  • 三合一网站制作公司59软文网
  • 网站次页接单平台
  • 江门自助建站模板青岛seo网站关键词优化
  • 做网站用什么软件免费网站接广告平台
  • 网站视频下载到手机怎么做网站推广方法
  • 网页大全长沙seo外包
  • 长春网站推广网诚传媒婚恋网站排名前10
  • 淘宝网站是哪个公司做的网络优化的基本方法
  • iis做网站上传速度慢seo查询在线
  • 网站建设费用分几年摊销开鲁网站seo转接
  • 佛山关键词排名方案济南网站自然优化
  • 龙岗网站制作资讯seo门户
  • 技术网站的费用怎么做会计分录软文发稿网站
  • 百度网站公司信息推广怎么做百度高级搜索技巧
  • 网页设计公司哪家效果好宝鸡百度seo
  • 商城网站都有哪 些功能什么叫外链
  • 网站空间邮箱商旅100网页版
  • 百度网站管理网页制作费用大概多少