1. 程式人生 > 實用技巧 >普及新識:快讀

普及新識:快讀

在單調佇列中,我的程式碼中出現了一個較為實用的東西:快讀。
貼模板:

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]


感謝觀看