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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <iostream>
#include <time.h>
using namespace std;
template<class TIter, class TFunc, class TValue>
int count_multiple(TIter begin, TIter end, TFunc equals, TValue compare) {
int count = 0;
while (begin != end) {
if (equals(*begin++, compare))
count++;
}
return count;
}
template<class TFunc, TFunc equals, class TIter, class TValue>
int count_multiple(TIter begin, TIter end, TValue compare) {
int count = 0;
while (begin != end) {
if (equals(*begin++, compare))
count++;
}
return count;
}
template<class T>
bool equals(T a, T b) {
return a == b;
}
__int64 dummy(__int64 i) {
return i/2L*i;
}
int main(int argc, char **argv) {
__int64 REPETITION_COUNT = 80000000L; // 80 mio
int array[] = { 1,1,1,2,3,4,5,6,7,8, 9,
1,1,1,2,3,4,5,6,7,8, 9,
1,1,1,2,3,4,5,6,7,8, 9,
1,1,1,2,3,4,5,6,7,8, 9,
1,1,1,2,3,4,5,6,7,8, 9 };
int multiple_count;
clock_t time_first = 0, time_second = 0;
multiple_count = 0;
time_first = clock();
for (__int64 i = 0; i < REPETITION_COUNT; i++) {
multiple_count += count_multiple(array, array+(10*5-1), equals<int>, 1);
multiple_count = dummy(multiple_count);
// cout << multiple_count << endl;
}
time_first = clock() - time_first;
multiple_count = 0;
time_second = clock();
for (__int64 i = 0; i < REPETITION_COUNT; i++) {
multiple_count += count_multiple<bool (*)(int,int),equals>(array, array+(10*5-1), 1);
multiple_count = dummy(multiple_count);
// cout << multiple_count << endl;
}
time_second = clock() - time_second;
cout << "With Pointer: " << time_first / CLOCKS_PER_SEC << endl
<< "Constant: " << time_second / CLOCKS_PER_SEC << endl;
system("pause");
return 0;
}
|