#include #include #include #include template 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 a = {"hello", "Hallo", "willkommen"}; std::vector 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; }