Se espliciti il costruttore di copia devi fare la copia di tutti i dati, invece fai la copia solo del puntatore interno.
Tra l'altro il costruttore di copia e l'operatore di assegnamento non servono nemmeno. Puoi benissimo toglierli.
operator++(int) puoi semplificarlo così:
codice:
iterator operator++(int) {
    iterator tmp(ptr,diz,diy,dix,cy,cx);
    ++(*this);
    return tmp;
}