diff --git a/TinySTL/Algorithm.h b/TinySTL/Algorithm.h index b98cd8a..027de22 100644 --- a/TinySTL/Algorithm.h +++ b/TinySTL/Algorithm.h @@ -235,6 +235,47 @@ namespace TinySTL{ } return first; } + //********** [find_end] ****************************** + //********* [Algorithm Complexity: O(N*N)] **************** + template + ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2){ + if (first2 == last2) + return last1; + ForwardIterator1 ret = last1; + while (first1 != last1) + { + ForwardIterator1 it1 = first1; + ForwardIterator2 it2 = first2; + while (*it1 == *it2) { + ++it1; ++it2; + if (it2 == last2) { ret = first1; break; } + if (it1 == last1) return ret; + } + ++first1; + } + return ret; + } + template + ForwardIterator1 find_end(ForwardIterator1 first1, ForwardIterator1 last1, + ForwardIterator2 first2, ForwardIterator2 last2, + BinaryPredicate pred){ + if (first2 == last2) + return last1; + ForwardIterator1 ret = last1; + while (first1 != last1) + { + ForwardIterator1 it1 = first1; + ForwardIterator2 it2 = first2; + while (pred(*it1, *it2)) { + ++it1; ++it2; + if (it2 == last2) { ret = first1; break; } + if (it1 == last1) return ret; + } + ++first1; + } + return ret; + } }