1. 程式人生 > >C++的cin和cout取消同步

C++的cin和cout取消同步

雖然C++有cin函式,但看別人的程式,大多數人都用C的scanf來讀入,其實是為了加快讀寫速度,難道C++還不如C嗎!?

其實cin效率之所以低,不是比C低階,是因為先把要輸出的東西存入緩衝區,再輸出,導致效率降低,而且是C++為了相容C而採取的保守措施。

在ACM裡,經常出現數據集超大造成 cin TLE的情況。這時候大部分人(包括原來我也是)認為這是cin的效率不及scanf的錯,甚至還上升到C語言和C++語言的執行效率層面的無聊爭論。其實像上文所說,這只是C++為了相容而採取的保守措施。我們可以在IO之前將stdio解除繫結,這樣做了之後要注意不要同時混用cout和printf之類。

在預設的情況下cin繫結的是cout,每次執行 << 操作符的時候都要呼叫flush,這樣會增加IO負擔。可以通過tie(0)(0表示NULL)來解除cin與cout的繫結,進一步加快執行效率。

#include <iostream>
int main() 
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    // IO
}