Quando cancelli un elemento da una std::list l'iteratore che hai usato non è più valido (se pensi a come è implementata una lista linkata la cosa dovrebbe essere ovvia). In ogni caso, proprio per gestire casi di questo tipo, std::list::erase restituisce un iteratore all'elemento successivo a quello che hai appena cancellato, per cui puoi fare:
codice:
while(iter!=b.end())        // /* Imposto l'iteratore iter , esso passa in rassegna
{                           //  * ogni elemento della lista . Se l'elemento è dispari
    if((*iter)%2!=0)        //  * viene eliminato. */
        iter = b.erase(iter);
    else
        ++iter;
}