/* Voorbeeldcode behorende bij het college "Programmeertechnieken",
 * LIACS, Universiteit Leiden.
 */

#include <iostream>

#include <vector>
#include <list>
#include <map>

#include <algorithm>

static void integer_container(void)
{
  std::vector<int> integers{ 123, 643, 542, 234, 834 };

  /* Itereren over de container */
  for (int a : integers)
    std::cout << a << " ";
  std::cout << std::endl;

  for (const auto &a : integers)
    std::cout << a << " ";
  std::cout << std::endl;
}

static void vector_and_pair_example(void)
{
  std::vector<std::pair<std::string, int> > leeftijden{
      std::make_pair("Joop", 53),
      std::make_pair("Karel", 23),
      std::make_pair("Ida", 32) };

  for (std::pair<std::string, int> paar : leeftijden)
    std::cout << paar.first << ", "
              << paar.second << std::endl;

  for (const auto &paar : leeftijden)
    std::cout << paar.first << ", "
              << paar.second << std::endl;
}

static void vector_and_pair_example2(void)
{
  using LeeftijdVector = std::vector<std::pair<std::string, int> >;

  LeeftijdVector leeftijden{ std::make_pair("Joop", 53),
      std::make_pair("Karel", 23),
      std::make_pair("Ida", 32) };

  for (const auto &paar : leeftijden)
    std::cout << paar.first << ", "
              << paar.second << std::endl;
}

static void vector_and_pair_example3(void)
{
  /* Leeftijden krijgt hier type std::initializer_list, dus niet vector
   * of iets dergelijks!
   */
  auto leeftijden = { std::make_pair("Joop", 53),
      std::make_pair("Karel", 23),
      std::make_pair("Ida", 32) };

  for (const auto &paar : leeftijden)
    std::cout << paar.first << ", "
              << paar.second << std::endl;
}

int main (void)
{
  integer_container();
  vector_and_pair_example();
  vector_and_pair_example2();
  vector_and_pair_example3();

  return 0;
}