36 if ( a ==
end || b ==
end ) {
48 ForwardIterator tail_a(a);
49 ForwardIterator tail_b(b);
50 if ( ++tail_a == ++tail_b ) {
57 ForwardIterator lists[2] = { a, b };
58 std::vector<ForwardIterator> suffixes[2];
60 for (
int i=0 ; i < 2 ; i++ ) {
61 for ( ForwardIterator iter(lists[i]) ; iter !=
end ; ++iter ) {
62 if ( iter == lists[1-i] ) {
66 suffixes[i].push_back(iter);
74 ForwardIterator longest_common(
end);
76 while ( !suffixes[0].empty() && !suffixes[1].empty() &&
77 suffixes[0].back() == suffixes[1].back() )
79 longest_common = suffixes[0].back();
80 suffixes[0].pop_back();
81 suffixes[1].pop_back();
84 return longest_common;