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

简介: sync_with_stdio和cin.tie(0); cout.tie(0);

sync_with_stdio


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


tie


tie是将两个stream绑定的函数,空参数的话返回当前的输出流指针。


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


ACM应用


在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);
// std::ios::sync_with_stdio(false);
// std::cin.tie(0),cout.tie(0); 


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


说白了,这两句加上就可以提高C++代码输入输出执行效率使得和C相差无几

相关文章
|
3月前
|
安全 C++
C++: std::once_flag 和 std::call_once
`std::once_flag` 和 `std::call_once` 是 C++11 引入的同步原语,确保某个函数在多线程环境中仅执行一次。
|
5月前
|
存储 监控 C++
cout.tellp()和cout.seekp()语法介绍
C++ 中的 `cout.tellp()` 用于获取输出流缓冲区的当前位置,而 `seekp()` 可以改变这个位置。数据先存入缓冲区,待缓冲区刷新后才输出。`tellp()` 返回一个表示位置的 `streampos`(通常可转换为整数),在无数据时为0,失败时为-1。`seekp()` 用于设置下一个字符的输出位置,接受一个位置参数或偏移量和方向,允许在缓冲区中移动并覆盖已有数据。例如,可以使用 `seekp()` 改变输出流中的部分数据,然后继续写入。
69 12
|
5月前
|
算法 iOS开发 C++
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项
默认情况下,C++的输入输出流与C标准库的输入输出函数是同步的,这会造成一定的性能损失。:使用cin.tie(0)和cout.tie(0)可以取消cin与cout之间的绑定,这意味着在进行输入操作时,不需要强行刷新输出缓冲区。:如果你的程序在输入输出中同时使用了C++的输入输出流和C标准库的输入输出函数(如scanf和printf),则不应该使用这段代码。:在使用了这段代码后,应避免使用C标准库的输入输出函数(如printf和scanf),因为这些函数与输入输出流的同步已被关闭。这段代码的主要用途是。
164 1
|
存储 监控 C++
C++ 的cout.tellp()和cout.seekp()语法介绍
无论是使用 cout 输出普通数据,用 cout.put() 输出指定字符,还是用 cout.write() 输出指定字符串,数据都会先放到输出流缓冲区,待缓冲区刷新,数据才会输出到指定位置(屏幕或者文件中)。 值得一提的是,当数据暂存于输出流缓冲区中时,我们仍可以对其进行修改。ostream 类中提供有 tellp() 和 seekp() 成员方法,借助它们就可以修改位于输出流缓冲区中的数据。 C++ tellp()成员方法 首先,tellp() 成员方法用于获取当前输出流缓冲区中最后一个字符所在的位置,其语法格式如下: streampos tellp(); 显然,tellp()
130 0
C++(cout和printf的使用小结)
C++(cout和printf的使用小结)
|
C++
c++中的std::stod, stCPP程序说明std::stod():stof, std::stold
std: :stod() : 它将字符串转换为双精度。
238 0
|
C语言 C++
C++ 中的 cout.setf() 函数
C++ 中的 cout.setf() 函数
C++ 中的 cout.setf() 函数
cin详解
cin详解
122 0
|
Unix C语言 iOS开发
C++cin,cout以及常见函数总结,cin,cout格式化控制
C++cin,cout以及常见函数总结,cin,cout格式化控制
C++cin,cout以及常见函数总结,cin,cout格式化控制
|
存储 Linux C语言
scanf的使用,cin和scanf的区别
scanf的使用,cin和scanf的区别
347 0
scanf的使用,cin和scanf的区别