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的使用:
intx;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長者親測的事實,教師機挺慢的。。。)
但還是堅持推廣一下讀入優化。。。
intread() //
被cin乾掉,無臉見人。。。
那麼更為重要的是輸出優化
//主要是將資料轉為字元輸出
inta;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乙個乙個讀入字元,轉化成數字。...