淺談那些你不知道的C艹語法

C艹實踐中的超神語法

##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隊列

##autoip

C++11中這貨tql!爽得很!自動匹配類型呀!配合範圍for,STL不再用迭代器!get

  • 自動匹配類型,爲C++11標準

栗子: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
  • class(不講)

那麼接下來我就講講template技術(大愛C艹)

  • 基本template

當你寫一個函數卻想要使用與各個版本的時候,你是否抓耳撓腮?

當你想寫一個類以資次各類類型的數據結構的時候時候,你是否趕上各類問題?

當你想寫一個資次任意多個參數的函數的時候,你是否對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)

##重載運算符"()"

同別的重載運算符格式

priority_queue

用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++啊。
相關文章
相關標籤/搜索