完成find_end
This commit is contained in:
@@ -235,6 +235,47 @@ namespace TinySTL{
|
||||
}
|
||||
return first;
|
||||
}
|
||||
//********** [find_end] ******************************
|
||||
//********* [Algorithm Complexity: O(N*N)] ****************
|
||||
template <class ForwardIterator1, class ForwardIterator2>
|
||||
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 <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user