關於cin和scanf速度的問題

2021-08-18 10:02:39 字數 675 閱讀 1184

在leetcode最優解法中常常看到:

//int型別引數

static int x = () ();

//string型別引數

int _some = ()();

查了一下發現是解決

cin,cout效率低的問題

cin、cout之所以效率低,是因為先把要輸出的東西存入緩衝區,再輸出,導致效率降低,而這段語句可以來打消iostream的輸入、輸出快取,可以節省許多時間,使效率與scanf與printf相差無幾。

tie是將兩個stream繫結的函式,空引數的話返回當前的輸出流指標。

這個函式是乙個「是否相容stdio」的開關,c++為了相容c,保證程式在使用了std::printf和std::cout的時候不發生混亂,將輸出流綁到了一起。

在acm裡,經常出現資料集超大造成 cin tle的情況。其實cin只是c++為了相容而採取的保守措施。我們可以在io之前將stdio解除繫結,這樣做了之後要注意不要同時混用cout和printf之類。

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

scanf和cin的差異

引例 大家都知道,在c 中有兩種輸入 輸出方式 scanf和cin,但是,它們之間存在的差異,你們知道麼?下面請看測評吧!測試題目 輸入n個數,輸出n個數。測試環境 ubuntu12.04 i3cpu 4g記憶體 7200轉硬碟 測試結果 測試結果使用linux的time測試時間,結果如下 1000...

scanf和cin輸入型別不匹配時造成的死迴圈問題

下面兩段 要實現的功能是往整數變數i中輸入乙個資料,輸入數字1時退出,然而當輸入乙個字元時,整個程式會變成乙個死迴圈。c int i 0 while i 1 c語言 int i 0 while i 1 原因 造成死迴圈的原因也很簡單,當第一次通過scanf函式讀入整數時,如果我們輸入的是乙個字元,那...

關於scanf和gets函式

首先,我描述一下我遇到的問題。先輸入乙個整數,回車,然後迴圈n次gets string 字串。輸出的結果,第乙個是空,從第二項開始有值。這是為什麼呢?int n,cnt 0 cin n vectorv 1000 while cnt本道題用gets 的好處在於,可以直接讀取一整行,空格也可以讀進去。如...