-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.cpp
110 lines (88 loc) · 2.72 KB
/
main.cpp
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <cassert>
#include <vector>
void test1() {
std::vector<int> vec {
// № 1 2 3 4 5 6 7 8 9 10 11
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 //
// beg end
};
std::vector<int>::iterator beg = vec.begin();
std::vector<int>::iterator end = vec.end();
assert(beg == beg);
assert(end == end);
assert(beg != end);
assert(beg < end);
assert(end > beg);
// NOTE:
// For a random access iterator type, distance(a,b) is defined to be b-a.
// [0]
// b
// |
assert(std::distance(beg, beg) == 0);
assert(beg - beg == 0);
assert(std::distance(end, end) == 0);
assert(end - end == 0);
// 0 _ [1]
// b _ |
assert(std::distance(beg, beg + 1) == 1);
assert(beg + 1 - beg == 1);
assert(std::distance(beg + 1, beg) == -1);
assert(beg - (beg + 1) == -1);
// 0 _ 1 _ [2]
// b _ _ |
assert(std::distance(beg, beg + 2) == 2);
assert(beg + 2 - beg == 2);
assert(std::distance(beg + 2, beg) == -2);
assert(beg - (beg + 2) == -2);
// ... ... ...|
assert(beg + 9 != end);
assert(std::distance(beg, beg + 9) == 9);
assert(beg + 9 - beg == 9);
// ..... .....|
assert(beg + 10 == end);
assert(std::distance(beg, beg + 10) == 10);
assert(beg + 10 - beg == 10);
assert(std::distance(beg + 10, beg) == -10);
assert(beg - (beg + 10) == -10);
assert(std::distance(beg, beg + 100500) == 100500);
assert(beg + 100500 - beg == 100500);
assert(std::distance(beg + 100500, beg) == -100500);
assert(beg - beg + 100500 == 100500);
// ..... .....|
assert(std::distance(beg, end) == vec.size() ); // 10
assert(end - beg == vec.size());
assert(std::distance(end, beg) == -vec.size() ); // -10
assert(beg - end == -vec.size());
assert(std::distance(end - 1, end) == 1);
assert(end - (end - 1) == 1);
assert(std::distance(end, end - 1) == -1);
assert(end - 1 - end == -1);
// 0 1 2 3 4 5 6 7 8 9
// | |
// 1 2 3 4 5
assert(std::distance(beg + 2, beg + 7) == 5);
assert(beg + 7 - (beg + 2) == 5);
// +2: b + +
// +7: b + + + + + + +
assert((beg + 2) < (beg + 7));
// 0 1 2 3 4 5 6 7 8 9
// | |
// 1 2 3
assert(std::distance(beg + 5, beg + 8) == 3);
assert(beg + 8 - (beg + 5) == 3);
// +5: b + + + + +
// +8: b + + + + + + + +
assert((beg + 8) > (beg + 5));
}
void test2() {
std::vector<int> vec;
std::vector<int>::iterator beg = vec.begin();
std::vector<int>::iterator end = vec.end();
assert(beg == end);
assert(std::distance(beg, end) == 0);
}
int main() {
test1();
test2();
return EXIT_SUCCESS;
}