double* begin = A;
double* end = A + N;
std::generate( begin, end, ... );
it.begin()
c'est n'importe quoi, un iterateur n'a pas de "begin" ou de "end". C'est begin/end qui est du type itérateur.
Morale : un pointeur est un iterateur. La réciproque est souvent fausse.