2016-04-28 12 views
1

Ich weiß, dass dies eine grundlegende Frage ist, aber ich bin ein Python-Benutzer sehr neu in C++C++ for-Schleife ein Array mit

I, für die der Eingangsparameter (Mass_min) Bedarf eine Funktion (cosmology.bias_eff) mit einer for Schleife berechnen müssen mit einem Array multipliziert werden (M_ratio).

Ich bin einen Fehler zu machen hier von zwei for Schleifen verwenden.

vector<double> M_ratio = {1.0,0.9,1.1,1.05,1.1,1.15,1.2,1.25,1.2}; 
double Mass_min = 2e13; 
double Delta0 = 200.0; 

for (redshift=0.0;redshift<1.7;redshift=redshift+0.2) 
{ 
    for (size_t i=0; i<M_ratio.size(); i++) 
    { 
     double Delta = cosmology.DeltaR(Delta0, redshift); 

     double bias_eff = cosmology.bias_eff(M_ratio[i]*Mass_min,redshift,Delta); 

     cout << bias_eff <<"," << endl; 
    } 
} 

Was ich will, ist für jede redshift im for Schleife, möchte ich durch Mass_minM_ratio multipliziert werden,

d.h. für redshift = 0.0, Mass_min = Mass_min*1.0, für redshift = 0.2, Mass_min = 0.9*Mass_min und so weiter.

Antwort

7

braucht man nur eine einzige Schleife:

vector<double> M_ratio = {1.0,0.9,1.1,1.05,1.1,1.15,1.2,1.25,1.2}; 
double redshift; 
int i; 
for (redshift=0.0,i=0; i<M_ratio.size(); i++,redshift+=0.2) { 
    double Delta = cosmology.DeltaR(Delta0, redshift); 
    double bias_eff = cosmology.bias_eff(M_ratio[i]*Mass_min,redshift,Delta); 
    cout << bias_eff <<"," << endl; 
} 

Bei jeder Iteration in redshift um 0,2 erhöht, die gleichzeitig i um eins erhöht wird. Innerhalb der Schleife findet die benötigte Berechnung statt.

+0

aber sollte es nicht 'für (doppelte Rotverschiebung = 0.0, i = 0;)' anstelle von 'int' sein? – user3397243

+0

Ja, Sie haben Recht. Korrigiert. Es tut uns leid. –