Skip to content

Commit a27e5de

Browse files
authored
Add files via upload
1 parent e2ceddf commit a27e5de

15 files changed

+3800
-0
lines changed

Algorithm.h

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
Algorithm.h
3+
4+
*/
5+
6+
#ifndef ALGORITHM_H_
7+
#define ALGORITHM_H_
8+
9+
#include <algorithm>
10+
11+
namespace ha
12+
{
13+
// 对所有元素进行条件测试
14+
template<typename InputIterator, typename UnaryPredicate>
15+
bool all_of(InputIterator first, InputIterator last,
16+
UnaryPredicate pred)
17+
{
18+
while (first != end)
19+
{
20+
if (!(pred(*first)))
21+
{
22+
return false;
23+
}
24+
++first;
25+
}
26+
return true;
27+
}
28+
29+
// 二分查找序列中第一个比val大的元素所对应的迭代器
30+
template<typename ForwardIterator, typename T>
31+
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
32+
const T& val)
33+
{
34+
ForwardIterator it;
35+
std::iterator_traits<ForwardIterator>::difference_type count, step;
36+
count = std::distance(first, last);
37+
while (count > 0)
38+
{
39+
it = first;
40+
step = count / 2;
41+
std::advance(it, step);
42+
if (!(val < *it))
43+
{
44+
first = ++it;
45+
count -= step + 1;
46+
}
47+
else
48+
{
49+
count = step;
50+
}
51+
}
52+
return first;
53+
}
54+
55+
// 二分法查找序列中第一个大于等于val值的元素所对应的指针
56+
template<typename ForwardIterator, typename T>
57+
ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
58+
const T& val)
59+
{
60+
ForwardIterator it;
61+
std::iterator_traits<ForwardIterator>::difference_type count, step;
62+
count = std::distance(first, last);
63+
while (count > 0)
64+
{
65+
it = first;
66+
step = count / 2;
67+
std::advance(it, step);
68+
if (val > *it)
69+
{
70+
first = ++it;
71+
count -= step + 1;
72+
}
73+
else
74+
{
75+
count = step;
76+
}
77+
}
78+
return first;
79+
}
80+
81+
// 二分搜索
82+
template<typename ForwardIterator, typename T>
83+
bool binary_search(ForwardIterator first, ForwardIterator last,
84+
const T& val)
85+
{
86+
first = std::lower_bound(first, last, val);
87+
return (first != last && *first == val);
88+
}
89+
}
90+
#endif

0 commit comments

Comments
 (0)