#include <string>
#include <iostream>
#include <vector>
#include <list>

int main()
{

    std::cout << "==== Testfall #1 ====" << std::endl;
    
    // Enkelt testfall
    std::vector<int> 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<int, int> 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<std::string> 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;
	}
    }
}