在c++
中,cin
和cout
的速度其實不並不慢,c++
中的流的io速度相當的快,其速度與初始設定的快取區大小和硬碟的io速度有關。
但在c++
中,為了相容c
的io(scanf
和printf
),cin
和cout
被設定為與c的io同步,這樣導致cin
和cout
的速度不如scanf
和printf
快。
另外,在預設情況下,標準輸入裝置(cin
)與標準輸出裝置(cout
)繫結在一起,它保證在呼叫輸入之前已經重新整理輸出緩衝區,這樣也會降低讀取效率。
所以,我們可以手動取消他們與c語言io的同步,並去掉cin
和cout
的繫結,加速讀取,使cin
的速度與scanf
相差無幾,甚至某些情況要快於scanf
。
注:在取消繫結後,使用scanf
和printf
可能會出現問題,比如讀取失敗或者提前輸出的問題,請不要再使用他們,不過可以使用getchar
和gets
等讀入函式。
加速**:
// 取消c++ io與c的同步
std::ios::
sync_with_stdio
(false);
// 取消cin和cout的繫結
std::cin.
tie(
null);
/*等價於cin.tie(0);*/
在讀取大量整數時,無論是cin
還是scanf
,都比getchar
的讀取效率要慢上不少,我們可以使用getchar
來模擬輸入函式,在讀取大量整數的時候效率會很高:
下面給出其中的一種實現方法:
inline
void
read
(int
& x)
將其放在solution
類的上方即可,一般情況用不到。
static
auto __=
()()
;//注意放在solution上面
加速Linux程式編譯的幾種方法
專案越來越大,每次需要重新編譯整個專案都是一件很浪費時間的事情。research了一下,找到以下可以幫助提高速度的方法,總結一下。有人說在windows下用了ramdisk把乙個專案編譯時間從4.5小時減少到了5分鐘,也許這個數字是有點誇張了,不過粗想想,把檔案放到記憶體上做編譯應該是比在磁碟上快多...
c 的幾種輸入方法
c 中幾個輸入函式的用法和區別 cin cin.get cin.getline getline gets getchar 1 cin 1 cin.get 2 cin.getline 3 getline 4 gets 5 getchar 1 cin 用法1 最基本,也是最常用的用法,輸入乙個數字 in...
C 中輸入字串的幾種方法
c 中幾個輸入函式的用法和區別 cin cin.get cin.getline getline gets getchar 1 cin 1 cin.get 2 cin.getline 3 getline 4 gets 5 getchar 1 cin 用法1 最基本,也是最常用的用法,輸入乙個數字 in...