sync_with_stdio和cin.tie(0); cout.tie(0);
文章目錄
- sync_with_stdio
- tie
- ACM應(yīng)用
sync_with_stdio
這個(gè)函數(shù)是一個(gè)“是否兼容stdio”的開關(guān),C++為了兼容C,保證程序在使用了std::printf和std::cout的時(shí)候不發(fā)生混亂,將輸出流綁到了一起。
tie
tie是將兩個(gè)stream綁定的函數(shù),空參數(shù)的話返回當(dāng)前的輸出流指針。
在默認(rèn)的情況下cin綁定的是cout,每次執(zhí)行 << 操作符的時(shí)候都要調(diào)用flush,這樣會增加IO負(fù)擔(dān)。可以通過tie(0)(0表示NULL)來解除cin與cout的綁定,進(jìn)一步加快執(zhí)行效率。
ACM應(yīng)用
在ACM里,經(jīng)常出現(xiàn)數(shù)據(jù)集超大造成 cin TLE的情況。這時(shí)候大部分人認(rèn)為這是cin的效率不及scanf的錯(cuò),甚至還上升到C語言和C++語言的執(zhí)行效率層面的無聊爭論。其實(shí)像上文所說,這只是C++為了兼容而采取的保守措施。我們可以在IO之前將stdio解除綁定,這樣做了之后要注意不要同時(shí)混用cout和printf之類。
在默認(rèn)的情況下cin綁定的是cout,每次執(zhí)行 << 操作符的時(shí)候都要調(diào)用flush,這樣會增加IO負(fù)擔(dān)。可以通過tie(0)(0表示NULL)來解除cin與cout的綁定,進(jìn)一步加快執(zhí)行效率。
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之所以效率低,是因?yàn)橄劝岩敵龅臇|西存入緩沖區(qū),再輸出,導(dǎo)致效率降低,而這段代碼可以來打消iostream的輸入 輸出緩存,可以節(jié)省許多時(shí)間,使效率與scanf與printf相差無幾.
說白了,這兩句加上就可以提高C++代碼輸入輸出執(zhí)行效率使得和C相差無幾
總結(jié)
以上是生活随笔為你收集整理的sync_with_stdio和cin.tie(0); cout.tie(0);的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物联网之IP Camera解决方案简介
- 下一篇: 关于素数的一些概念