C++ 令人无语/好用的语法合集
此贴用来总结一些傻逼C++语法,或者坑了我很久的写法。
1、(坑)重载 > , < , == 时,千万不要使用 pair 为基的 typedef!!!!!!
pii 的 max 不受你的重载影响,它自己有自己的 max,然后 typedef 和 define 是相同的,基本可以看做直接替换,不会对作用域/命名做区分。
2、(坑)lower_bound(..,..,{x,y}) 会报错,不能自动推断,必须写 m_p ,ll和int不转换同理。
3、(坑)当一个struct有非默认构造的时候,就必须有默认构造,如
struct Line{int k,b;Line(int kk,int bb){k=kk,b=bb;}};
是会报错的。
需改为:struct Line{int k,b;Line(){k=b=0;}Line(int kk,int bb){k=kk,b=bb;}};
4、(糖)struct可以用 Line{..,..} 的方式构造,变量顺序放入即可。但请注意,在 m_p()一个 pair<Line,int>
时,请打括号,如 m_p((Line{2,1}),2);
否则会CE。
5、(糖)void solve(vector<int> (&G)[MAX]){return ;}
可以把一个图当成变量传进去!
6、(坑)结构体A和B的实例存在相互调用的时候,需要使用前置声明。
点击查看代码
struct B{
void op2(){
cout<<"op2"<<endl;
}
void op3();
};
struct A{
void op1();
void op4(){
cout<<"op4"<<endl;
}
};
A a;
B b;
void B::op3(){
a.op4();
}
void A::op1(){
b.op2();
}
7、(坑)在 redefine 之前,需要先 undef 之前的(否则会warning),undef ls(x)这个东西的时候,直接写 undef ls 就行了 ,多写了会报warning