1) Gli iteratori nella loro forma più semplice possono essere semplici puntatori. Alcune implementazioni vecchie della STL facevano un semplice typedef.
codice:
   typedef T* iterator;
2) Prendi spunto da qui (ti avevo già postato il link)
http://www.cplusplus.com/reference/algorithm/for_each/

3) Devi specializzare il sort in base al container scelto. Alcuni algoritmi funzionano meglio con array, altri con liste.

4) Poter usare ereditarietà, polimorfismo, sintassi meno oscure rispetto ai puntatori a funzione e altro che si può scoprire solo usandoli. Non sono la panacea ma aiutano.