Come creare un comando for loop like in C ++?
Domanda
Voglio fare qualcosa di molto semplice in C ++ ma non riesco a trovare come. Voglio creare una funzione come un ciclo for in cui idealmente inserirò una variabile per le volte in cui dovrebbe avvenire l'iterazione e alcune funzioni tra parentesi verranno eseguite dalla mia funzione. Spero di essere stato abbastanza chiaro. Grazie ...
Esempio
superFor (1)
{
//commands to be executed here
add(1+2);
}
Soluzione
Quello che vuoi non è possibile in C ++ perché la (versione corrente del) linguaggio manca di alcune funzionalità che sono richieste qui: vale a dire, la creazione di blocchi funzionali & # 8220; al volo & # 8221 ;.
Il meglio che puoi fare è passare un puntatore a funzione o un oggetto funzione alla tua funzione. L'STL offre molti esempi di questo. Prendere in considerazione:
void out(int x) {
cout << x << ' ';
}
vector<int> xs;
xs.push_back(42);
xs.push_back(23);
for_each(xs.begin(), xs.end(), out);
Questo passa un puntatore alla funzione out
alla funzione for_each
.
Altri suggerimenti
#define superFor(n) for(int i = 0; i < (n); i++)
Modifica: fai attenzione a non usare un'altra variabile chiamata i nel ciclo.
in C ++ lo fai con un normale for-loop.
for(variable; condition; increment) {
//stuff goes here
}
Nel tuo for-loop: variabile è una variabile di conteggio come me. Puoi definire la variabile qui e inizializzarla. Spesso vedi qualcosa come & Quot; int i = 0 & Quot;
La condizioneè una sorta di test. Nel tuo caso, vuoi verificare se la tua variabile di conteggio è inferiore a quante volte vuoi eseguire il ciclo. Metteresti qualcosa come & Quot; i & Lt; how_many_times_to_loop quot &;
increment è un comando per incrementare la variabile di conteggio. Nel tuo caso vuoi & Quot; i ++ & Quot; che è un modo breve di dire " i = i + 1 "
Quindi questo ci dà:
for(int i = 0; i < how_many_times_to_loop; i++) {
//stuff goes here
}
È pazzesco, ma potrebbe funzionare ...
http://www.boost.org/doc /libs/1_36_0/doc/html/lambda.html .
Puoi usare una macro.
#define superFor(v,i) for(int v=0; v<(i); v++)
e usalo in questo modo:
superFor(i,10) {
printf("Doing something ten times");
}
Forse BOOST_FOREACH farà quello che vuoi:
http: //engineering.meta-comm .com / risorse / CS-win32_metacomm / doc / html / foreach.html
void DoSomethingRepeatedly(int numTimesTo Loop)
{
for(int i=0; i<numTimesToLoop; i++)
{
//do whatever;
}
}
Quello vero? Non può essere .. troppo semplice .. Devo essere frainteso la tua domanda :( Ovviamente dovresti controllare che il valore di numTimesToLoop sia & Gt; = 0.
Modifica: l'ho reso un metodo, per ogni evenienza.