#include <iostream>
#include <iterator>
#include <list>

int main( ) {
   std::list<int> lista;

   lista.push_back(5);
   lista.push_back(7);
   lista.push_back(8);
   lista.push_front(0);
   lista.push_front(2);

   for (auto iter = lista.begin( ); iter != lista.end( ); ++iter) {
      std::cout << *iter << " ";          // { 2 0 5 7 8 }
   }
   std::cout << "\n";


   auto iter = lista.begin( );            // parados en el inicio (en el 2)
   std::advance(iter, 3);                 // equivalente a ++iter, ++iter, ++iter;
   lista.insert(iter, 6);                 // insertar un 6 antes del 7

   for (auto iter = lista.begin( ); iter != lista.end( ); ++it) {
      std::cout << *iter << " ";          // { 2 0 5 6 7 8 }
   }
   std::cout << "\n";

   std::advance(iter, -2);                // equivalente a --iter, --iter;
   lista.erase(iter);                     // eliminar el 5

   for (auto iter = lista.begin( ); iter != lista.end( ); ++iter) {
      std::cout << *iter << " ";          // { 2 0 6 7 8 }
   }
   std::cout << "\n";

   iter = lista.begin( );                 // parados en el 2
   ++iter;                                // avanzamos al 0
   std::cout << *std::prev(iter) << " " << *iter << " " << *std::next(iter) << "\n";
      // con apuntadores sobre un arreglo, esto hubiera equivalido a   *(iter - 1), *iter, *(iter + 1)
}
