有一天,我在网上看到有人说重载 max() 函数是一种有用的卡常技巧,今天就来测一下重载 max() 到底是有用还是帮了倒忙。

正文

1.代码

直接放代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
#define re register
typedef long long LL;

LL numof = 100000000;

/*在这里做初始化和准备工作*/
inline int Max(int a, int b) {
return a > b ? a : b;
}
/*在这里做初始化和准备工作*/

int main() {
printf("Time to do %lld is ", numof) ;

clock_t emptystart = clock();
for (re LL i = 0; i < numof; ++i) {
}
clock_t emptyend = clock();

clock_t teststart = clock();
for (re LL i = 0; i < numof; ++i) {
/*在这里放测试代码*/
max(13, 12);
//Max(13, 12);
/*在这里放测试代码*/
}
clock_t testend = clock();

printf("%.6lf\n", (double)
((testend - teststart) - (emptyend - emptystart))
/ CLOCKS_PER_SEC);
}
2.讲解
  1. 如果 numof 设得比较大最好加上 emptystartemptyend 来排除循环本身的耗时。

1
2
3
printf("%.6lf\n", (double) 
((testend - teststart) - (emptyend - emptystart))
/ CLOCKS_PER_SEC);

很简单。

3.结果
  1. C 自带的 max

  1. 自制的 Max

是有优化的,但效果并不明显 . . .