#include #include #include #include #include template auto get_pairs(It begin, It end) { using value_type = typename It::value_type; std::vector> pairs { }; for (It current { begin }; current != end; ++current) { for (It next { std::next(current) }; next != end; ++next) { pairs.emplace_back(*current, *next); } } return pairs; } int main() { std::cout << "==== Testfall #1 ====" << std::endl; // Enkelt testfall std::vector v1 { 1, 2, 3, 4 }; auto v1_pairs { get_pairs(v1.begin(), v1.end()) }; // v1_pairs innehåller par, så vi loopar över den for (std::pair p : v1_pairs) { std::cout << p.first << " + " << p.second << " = " << p.first + p.second << std::endl; } std::cout << "==== Testfall #2 ====" << std::endl; // Vi vill skriva ut alla par av namn där ena namnet slutar på // samma bokstav som andra namnet börjar på. // Använder std::list för att kolla att det fungerar för olika typer std::list names { "PONTUS", "CHRISTOFFER", "ERIC", "HANNA", "MALTE", "WILHELM" }; auto name_pairs { get_pairs(names.begin(), names.end()) }; // Man kan loopa över denna på samma sätt som std::map eftersom // att den innehåller std::pair objekt for (auto const& [a, b] : name_pairs) { // om a slutar på samma bokstav som b börjar på... if (a.back() == b.front()) { std::cout << a << " " << b << std::endl; } // om b slutar på samma bokstav som a börjar på... else if (a.front() == b.back()) { std::cout << b << " " << a << std::endl; } } }