cin.tie(0); 和 cout.tie(0); 分别是啥意思?
我搜到了,但是不大懂,能不能帮我详细的解释一下?
int main(){
cin.tie(0);
cout.tie(0);
cin >> n;
for(ll i = 1; i <= n; i++){
cin >> a[i];
}
这个代码里的
cin.tie(0); 和 cout.tie(0); 分别是啥意思?
我搜到了,但是不大懂,能不能帮我详细的解释一下?
int main(){
cin.tie(0);
cout.tie(0);
cin >> n;
for(ll i = 1; i <= n; i++){
cin >> a[i];
}
这个代码里的
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的绑定,进一步加快执行效率。
原来而cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段代码可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几.
说白了,这两句加上就可以提高C++代码输入输出执行效率使得和C相差无几
有帮助请采纳,其实就是提高程序的效率,减少执行时间