關於讀入輸出

2022-03-04 09:34:47 字數 2257 閱讀 9766

cin, cout

cin 與 cout 由於語法簡單,自動識別型別,深受許多初學者的青睞。不過又因為cin cout 個人認為速度較慢,所以初學階段過後用的也就不多了。而今天這一節課,真的是懷疑世界啊!!! (原來我一前的認知存在不少問題)

然後介紹一下:  ios::sync_with_stdio(false);

ios::sync_with_stdio(false

);//

用以優化cin, cout, 使其速度接近scanf, printf.

//但是一旦開啟此優化,不可再使用scanf, printf.否則可能re。

inta;

cin >>a;

a = 1

;cout

<< a << endl;

scanf, printf

這種方法是很多人放棄cin後的第乙個選擇:

scanf的使用:

int

x;scanf("%d

", &x);

double

y;scanf(

"%lf

", &y);

char s[100

];scanf("%s

", s);

scanf("%s

", s + 1); //

下標從1開始

long

long

z;scanf(

"%lld

", &z); //

unix(linux ubunut mac osx)

scanf("

%i64d

", &z); //

win32

//win64以上方法都可以

那麼考試時怎麼辦呢??

ccf提供xp系統(233確是事實),評測卻要用linux,考場上可能會產生一些問題:你除錯程式要寫i64d,寫完最後改成lld也不知有沒有疏漏。

於是可以程式裡加入

#ifdef win32

#define ll "%i64d"

#else

#define ll "%lld"

#endif

然後就可以各個系統通用了。

printf的使用

類似scanf,但是無位址符

nt x;

printf("%d

", x);

double

y;printf(

"%lf

", y);

char s[100

];printf("%s

", s);

printf("%s

", s + 1); //

下標從1開始

long

long

z;printf(

"%lld

", z); //

unix(linux ubunut mac osx)

printf("

%i64d

", z); //

win32

速度比較

比如輸出1e7個數,我們來比較一下各種方法的用時

cout 20.91s

printf 30.35s

print() 1.47s //輸出優化

而輸入1e7個數呢

scanf 9.78s

cin 12.23s

cin(優化後)2.18s

read() 2.98s

於是發現無優化的cout已經可以乾掉printf,而優化後的cin更是直接完爆scanf!!!

(並不符合我從前的認知,卻是zhx長者親測的事實,教師機挺慢的。。。)

但還是堅持推廣一下讀入優化。。。

int

read() //

被cin乾掉,無臉見人。。。

那麼更為重要的是輸出優化

//主要是將資料轉為字元輸出

int

a;int l = 0

;char s[80000000

]void print(int

v)for (int i = 1; i <= n; ++i)

++l;

s[l] = '\n'

;}

讀入輸出優化

1 void read int x 表示引用,也就是說x是乙個實參,在函式中改變了x的值就意味著在外面x的值也會被改變212 while s 0 s 9 是字元 一旦不是字元就意味著輸入結束了 1317 x f 改變正負 18 1 void print int x 這裡不用實參28 if x 9 只...

讀入優化 輸出優化

注意了注意了注意了,重要的事情說3遍,這個東西是騙分神器,騙分神器,騙分神器!眾所周知 scanf比cin快得多,printf比cout快得多,如果你不知道就 就現在知道了 那有沒有更快的呢?當然。請看 好吧,這就是讀入優化的效果,在資料很恐怖的情況下能比scanf多過1 5個點 比如說這種 都說了...

常用讀入 輸出優化

本文主要講述常用的2種讀入優化方法。輸出優化很少使用,在此簡單提一下 也就是把輸出的東西先放進字串,再一次性puts printf出去。提公升不大,不常用。首先當然需要先知道,scanf printf比cin cout快不少。讀入優化 getchar 使用getchar乙個乙個讀入字元,轉化成數字。...