普及新識:快讀
阿新 • • 發佈:2020-11-30
在單調佇列中,我的程式碼中出現了一個較為實用的東西:快讀。
貼模板:
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
①:用法
正常是使用cin>>和scanf("%d",&)對吧?
由於read是一個int型別的函式,所以只用這樣:
int a=read(),b=read();
且只能賦int型別的數值。
如果純粹想背模板的,記下這個就好。我好吧?我慷慨吧?
②:原理
它分為兩個部分。
一:符號部分
當輸入非減號符號時,跳出這個迴圈,否則給做一個標記。這是用來判斷正負型的。
二:數字部分
利用位值原理儲存數字,一個一個數字以字元的方式輸入(getchar)。
最後返回1or-1 * 數字就好啦。
③:getchar()
你只需要知道這是一個很快的輸入函式就好啦,是處理字元用的。
根據某60百科:
getchar有一個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵. 使用者輸入的字元被存放在鍵盤緩衝區中.直到使用者按回車為止(回車字元也放在緩衝區中). 當用戶鍵入回車之後,getchar才開始從stdio流中每次讀入一個字元.getchar函式的返回值是使用者輸入的第一個字元的ASCII碼,如出錯返回-1,且將使用者輸入的字元回顯到螢幕. 如使用者在按回車之前輸入了不止一個字元,其他字元會保留在鍵盤快取區中,等待後續getchar呼叫讀取.也就是說,後續的getchar呼叫不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完為後,才等待使用者按鍵.
④:速度
根據民間資料,她cin的50倍速度左右,是scanf的2~3倍(不確定,勿噴,回去查資料)
怎麼樣?是不是很恐怖?
最後給一篇部落格:(快速讀入詳解)[https://www.cnblogs.com/newbiePWang/p/10192655.html]