zoukankan      html  css  js  c++  java
  • 浅谈那些你不知道的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,暴力踩标算!

    __attribute__

    赋予函数属性:

    always-inline 强制inline

    noinline 强制不inline

    auto

    C++11中这货tql!爽得很!自动匹配类型呀!配合范围for,STL再也不用迭代器!

    • 自动匹配类型,为C++11标准

    栗子:

    vetcor p<int> ;
    auto q = p;
    auto e = p[0] ;
    
    • 范围for循环,15字遍历:
      for(auto& y:n)

    • 配合函数定义使用(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++啊。
    
  • 相关阅读:
    *循环-04. 验证“哥德巴赫猜想”
    循环-03. 求符合给定条件的整数集
    *循环-01. 求整数段和【help】
    分支-15. 日K蜡烛图
    分支-14. 简单计算器
    *分支-13. 计算天数
    *分支-12. 计算火车运行时间
    自我介绍
    JAVA WEB第0课
    Forward团队-爬虫豆瓣top250项目-成员简介与分工
  • 原文地址:https://www.cnblogs.com/tyqtyq/p/I-love-cpp.html
Copyright © 2011-2022 走看看