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);
}
È stato utile?

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");
}
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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top