##pragma
數據結構
卡常必備QAQ函數
#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks")
pragma!pragma!用了pragma,暴力踩標算!oop
__attribute__
賦予函數屬性:spa
always-inline 強制inlinecode
noinline 強制不inline隊列
##auto
ip
C++11中這貨tql!爽得很!自動匹配類型呀!配合範圍for,STL不再用迭代器!get
栗子:it
vetcor p<int> ; auto q = p; auto e = p[0] ;
範圍for循環,15字遍歷: for(auto& y:n)
io
配合函數定義使用(auto -> delctype):
template<class T,class Y> auto work(T t,Y y) -> delctype(t+y){ dosomething ; }
暫時沒有更好的栗子QAQ
##template
傳說中C艹相對於C加入了兩個重要元素:
那麼接下來我就講講template技術(大愛C艹)
當你寫一個函數卻想要使用與各個版本的時候,你是否抓耳撓腮?
當你想寫一個類以資次各類類型的數據結構的時候時候,你是否趕上各類問題?
當你想寫一個資次任意多個參數的函數的時候,你是否對C的語法不知因此,雲裏霧裏?
那麼,C艹就是你的福音!C艹的模板技術給予工做人員們無限的可能!
基本使用嗎,假設你在編寫一個接受int型參數的函數,只要把template<class/typename type>
加在函數頭,全部int改爲type就珂以了
//樣例 template<class Type>Type add(Type a,Type b){ return a+b; }
模板類
初級
接下來的class
當成struct
就珂以了
template<class type> class edge{ int to; int next; type edge; } //這實現了一個邊權可爲任意參數的edge
怎麼樣?
拿我寫口胡的並查集作實例QAQ
#pragma GCC optimize(2) #include<map> using std::map; /* ...... */ template<class T>class Union_Find_Sets{ pravite: map<T,T> fa ; public: T getfa(T a){ if(fa[a]==a)return a ; else return fa[a] = getfa(fa[a]) ; } T merge(T a,T b){ T aa = getfa(a),bb = getfa(b) ; if(aa==bb)return ; else fa[aa] = bb ; } bool query(T a,T b){ T aa = getfa(a),bb = getfa(b) ; if(aa==bb)return true ; else return false; } friend bool operator()(T a,T b){ return query(a,b) ; } //口胡代碼 }
template<class T,class Y> auto max(T FiRsT,Y SeCoNd) ->delctype(FiRsT+SeCoNd){ if(FiRsT>SeCoNd)return FiRsT; else return SeCoNd ; } template<class T,class ...Args> auto max(T FiRsT,Args... argv) ->delctype(FiRsT){ return max(FiRsT,max(argv...)) ; }
強爆了!不知道比C好多少倍,一個函數走天下!(原諒那無比醜陋的碼風QAQ)
##重載運算符"()"
同別的重載運算符格式
用STL中的優先隊列做個實例:
template<class type> class cmp{ friend bool operator()(type a,type b){ if(a>b)return true; else return false; } } priorty_queue<int,vector<int>,cmp<int> >Q ;
Warning! 本文由 TYQ 創做,採用 知識共享署名 4.0 國際許可協議進行許可。 轉載要與做者聯繫,並需在正文明顯處署名做者且註明文章出處。 對了,我永遠喜歡C++啊。