C++ 讀入/輸出優化
考試時若題目有大量輸入輸出,最好使用讀入/輸出優化.
scanf與printf比cin和cout快,而getchar和putchar是最快的(這兩個函式本是讀/寫一個字元的,這裡用作優化).
(一)手寫優化
版本1:
<cctype>:isdigit(x)判斷x是否為十進位制整數
#include <iostream> #include <cstdio> #include <cctype> using namespace std; int Read() { char c; int ans = 0; bool Sign = false; while(!isdigit(c=getchar()) && c != '-'); //去除非法字元 if(c == '-') { Sign = true; c = getchar(); } do { ans = ans * 10 + (c - '0'); }while(isdigit(c=getchar())); return Sign ? -ans : ans; } void Write(int x) { if(x < 0) { putchar('-'); x = -x; } if(x >= 10) Write(x / 10); putchar(x % 10 + '0'); } int main() { int a; a = Read(); Write(a); return 0; }
版本2:在某些地方再優化
1> inline關鍵字.一般將不是很複雜呼叫次數多的函式定義為inline(行內函數),在編譯時,編譯器會把該函式的程式碼副本放置在每個呼叫該函式的地方。這與define相似,可以提高速度.(不要濫用於長函式)
2> ans * 10改為了位運算:(ans << 3)+(ans << 1).
ans<<3就是ans*23 得ans*8
同理,ans<<1就是ans*2;
因此(ans << 3)+(ans << 1)與ans*10是相同的,在運算速度上有所提升;
#include <iostream> #include <cstdio> #include <cctype> using namespace std; inline int Read() { char c; int ans = 0; bool Sign = false; while(!isdigit(c=getchar()) && c != '-'); if(c == '-') { Sign = true; c = getchar(); } do { ans = (ans<<3) + (ans<<1) + (c - '0'); }while(isdigit(c=getchar())); return Sign ? -ans : ans; } inline void Write(int x) { if(x < 0) { putchar('-'); x = -x; } if(x >= 10) Write(x / 10); putchar(x % 10 + '0'); } int main() { int a; a = Read(); Write(a); return 0; }
(二)優化cin、cout
要是不會scanf和printf,也不手寫優化,那就在主函式第一句寫上:
ios::sync_with_stdio(false);
這取消了cin、cout與scanf、printf的同步,可以加快速度,但不可再用scanf、printf了,會混亂的..
相關推薦
C++ 讀入/輸出優化
考試時若題目有大量輸入輸出,最好使用讀入/輸出優化. scanf與printf比cin和cout快,而getchar和putchar是最快的(這兩個函式本是讀/寫一個字元的,這裡用作優化). (一
讀入輸出優化模板
log pan 直接 turn 系統底層 分鐘 none getchar spa 因為是直接調用系統底層所以速度會很快... 1 long long read(){ 2 long long x=0,w=1; 3 char c=0; 4
讀入,輸出 優化
getchar() linu inline 充足 空間 lin 字符串 -1 dig 讀入 inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdi
常用讀入輸出優化
print 索引 getchar() 數組 printf 定義 max fine 一個 本文主要講述常用的2種讀入優化方法。 輸出優化很少使用,在此簡單提一下:也就是把輸出的東西先放進字符串,再一次性puts\printf出去。提升不大,不常用。 首先當然需要先知道,sca
NOIP2016T4暨洛谷P2119解題報告+讀入輸出優化(原創+轉載)
Part 1: 解題報告(原創) 第一次 先來一波截圖: 評測網站:洛谷 首先,先說一說我第一次個人的思想,只想著暴力列舉: 程式碼 #include<iostream> #include<memory.h&g
『c++讀入與輸出的探索』
對於讀入與輸出的探索和優化 ·cin和cout ·scanf和printf ·關閉同步流 ·freopen和fclose ·整型read ·浮點型與字串read ·快輸 ·fread <更新提示> <第一次更新> <正
c++讀入優化模板
int getint() { char ch=getchar(); while (ch<'0' || ch>'9') ch=getchar(); int res=0;
C++ 讀入優化 fread()版本
今天被讀入優化坑慘了 因為一道隨便水水就能過的屎題,調了一下午我一直以為是我STL的鍋。 以後校OJ上讀入量超過10mb的題目,不寫這個優化,我名字倒著寫… 版本1 #include&l
c++讀入優化(整數)
一、背景 這是某道題目的狀態: 我的程式碼: 大牛的程式碼: 我瞬間萌幣了! 我有這麼慢?Are you kidding me? 點進去一看: void Read(int & p) { p=0;
c++ 讀入和寫入文件
spa end ofstream OS pen clu img ++ lin 讀入 #include<ifstream> ifstream infile; infile.open(img_dir); while(getline(infile,tmp)){
卡常神器——register 與 快速讀入輸出
可能 () amp 很多 服務 char 讀取 get 裏的 快速讀入模板 int read() { int s = 0, w = 1; char ch = getchar(); //getchar() 一次從鍵盤讀入一個字符 while (ch &
c++ 讀入一個字元
#include <iostream> using namespace std; int main() { char c; cin>>c; //自動過濾掉不可見字元(如空格 回車 
快速讀入輸出
普通快速讀入 inline void Read(int &x) { char c=getchar(); x=0; while (c<'0'||c>'9') { c=getchar(); } while (c&
C++讀入一行字串
cin.getline(char * str, int size_t, char delim) 標頭檔案: #include<iostream> 引數1:字元陣列 引數2:讀入字串長度 引數3:終止符 示例: char str[105]; cin.ge
C++—— 讀入一張bmp圖片,提取其影象資料,存入矩陣/txt檔案
本文章完成的是讀入bmp圖片、將資料存入矩陣/TXT檔案、儲存圖片的功能。在開始之前,我們需要了解bmp點陣圖的儲存方式:BMP檔案的資料按照從檔案頭開始的先後順序分為四個部分:(1)bmp檔案頭(bmp file header):提供檔案的格式、大小等資訊(2)點陣圖資訊頭
C/C++讀入若干連續資料
如果題目要求你讀入若干個連續整數,其間用空格隔開,換行符作為輸入結束標準,數目不知道,要求你將輸入的數排序列印,求max,min,排序等 用優先佇列實現排序,當然使用set也可以 #include <iostream> #include <queue> using
c++讀入字串:cin和getline的比較
c++輸入字串到string類可以用getline函式,第一個引數是cin,第二個引數是string類的變數,第三個引數是結束標誌。 該函式不會讀入結束標誌,而是跳過。 當cin>>從緩衝區中讀取資料時,若緩衝區中第一個字元是空格、tab或換行這些分隔符時,c
【墻裂推薦】讀入優化和輸出優化
return getchar() ret style getchar 決定 推薦 int div 讀入優化: 1 inline int read() 2 { 3 int X=0,w=1; char ch=0; 4 while(ch<‘0‘ || ch
讀入優化 && 輸出優化
找到 getch oid 優化 include write tex utc getc qwq算是一個板子隨筆吧 快讀我在某大佬的博客中找到了更短的代碼 但是這個寫習慣了就改不了了qwq 其實是我不想改 廢話好多 直接貼代碼 1 //讀入優化 2 inline int
c語言 用getchar函式讀入兩個字元給c1 c2 用putchar和printf輸出 思考問題
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!