algorithm库里的min,max具体是怎么实现的?

学术版

min和max不是iostream里的吗?你定义两个函数,不用define试试,我不是经常用define所以不是太懂
by ___I_AK_IOI @ 2018-07-20 23:04:58


```cpp #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) < (b) ? (b) : (a)) ``` 这样`define`即可AC。估计是运算符优先级的锅吧。`define`的时候多加几个括号,或者使用`inline`函数比较好。 @[wsm000](/space/show?uid=32196)
by cqqqwq @ 2018-07-20 23:07:03


楼上强啊!!!,确实你这种优先级会很低但是感觉你套对了,也许我是蒟蒻把。。。
by ___I_AK_IOI @ 2018-07-20 23:09:18


的确,define要注意优先级。 但是更要注意的是,最好不要define max和min
by 小粉兔 @ 2018-07-20 23:24:21


比如 ``` int func1(){ static int x=0; ++x; return x; } int func2(){ static int x=1; ++x; return x; } ``` 然后你 ``` printf("%d",min(func1(),func2()); ``` 会输出`2`
by 小粉兔 @ 2018-07-20 23:26:07


讲个笑话:有人在线段树中用了 define,然后就 T 飞了。 ``` #define max(a,b) a > b ? a : b ll query(int k, int l, int r) { if (tree[k].l == l && tree[k].r == r) { return tree[k].mx; } int mid = (tree[k].l + tree[k].r) >> 1; if (mid >= r) { return query(k << 1, l, r); } else if (mid < l) { return query(k << 1 | 1, l, r); } else { return max(query(k << 1, l, mid), query(k << 1 | 1, mid + 1, r)); } } ```
by hellomath @ 2018-07-20 23:28:16


不过不是我
by hellomath @ 2018-07-20 23:28:25


@[陈启乾](/space/show?uid=57601) inline好像在之后还要加int double等类型吧。。。 我直接这样: ``` inline max(int x,int y) ``` 在本地可以跑,但是在你谷上却是CE... 如果这样: ``` inline int max(int x,int y) int inline max(int x,int y) ``` 这两种编译才会通过 请问大佬,这是编译器的锅吗?
by nothingness @ 2018-07-20 23:29:54


@[nothingness](/space/show?uid=31317) 是的
by GNAQ @ 2018-07-20 23:42:44


不是编译器的锅,是我说的不太清楚。 `inline`是修饰函数的。你只能在一个函数前面加上`inline`限定。 比如: ```cpp inline int max(int a,int b){ return a>b?a:b; } ``` @[nothingness](/space/show?uid=31317)
by cqqqwq @ 2018-07-20 23:44:13


| 下一页