Non l'ho testato ma dovrebbe andare bene.
codice:
class RetrieveParamX {
	private:
		double* pa;
	public:
		RetrieveParam(double* a) : pd(a) { ; }
		void operator()(punto& p){
			*pa++ = p.x;
		}		
};

double da = new double[vec.size()];
for_each(vec.begin(),vec.end(),RetrieveParamX(da));
...
// alla fine
delete[] da;
Questo vale per un singolo array e per copiare la x. Ovviamente si può estendere, parametrizzare etc. Modificando il costruttore, aggiungendo altri due puntatori e altre due copie, puoi creare e copiare tre array in un colpo solo.