From 107578b252952ead925e9bf59736854c5d6167ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=93=E8=88=AA?= <1210603696@qq.com> Date: Fri, 24 Oct 2014 16:08:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90find=5Fend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TinySTL/Algorithm.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) 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; + } }