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++啊。