完成find_end
This commit is contained in:
@@ -235,6 +235,47 @@ namespace TinySTL{
|
|||||||
}
|
}
|
||||||
return first;
|
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