Beispiellösung

Content

#include <iostream>
#include <tuple>
#include <vector>
#include <boost/algorithm/string.hpp>

template<typename IT1, typename IT2, typename P>
auto compare(IT1 begin1, IT1 end1, IT2 begin2, IT2 end2, P&& predicate) {
   while (begin1 != end1 && begin2 != end2) {
      if (!predicate(*begin1, *begin2)) break;
      ++begin1; ++begin2;
   }
   return std::make_tuple(begin1, begin2);
}

int main() {
   std::vector<std::string> a = {"hello", "Hallo", "willkommen"};
   std::vector<std::string> b = {"Hello", "haLLo", "Willkommen!"};
   auto [it1, it2] = compare(a.begin(), a.end(), b.begin(), b.end(),
      [](const std::string& s1, const std::string& s2) {
	 return boost::iequals(s1, s2);
      });
   std::cout << "compare stopped at: ";
   if (it1 != a.end()) {
      std::cout << "'" << *it1 << "'";
   } else {
      std::cout << "end";
   }
   std::cout << ", ";
   if (it2 != b.end()) {
      std::cout << "'" << *it2 << "'";
   } else {
      std::cout << "end";
   }
   std::cout << std::endl;
}
theon$ g++ -Wall -std=c++17 -o compare compare.cpp
theon$ ./compare
compare stopped at: 'willkommen', 'Willkommen!'
theon$