È possibile definire 2 variabili dello stesso tipo in un ciclo for:Esiste un modo per definire le variabili di due tipi diversi in un inizializzatore del ciclo for?
int main() {
for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
ma è illegale per definire le variabili di diverse tipologie:
int main() {
for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
C'è un modo per fare questo? (Non ho bisogno di usare i
all'interno del ciclo, solo j
.)
Se hai una soluzione totalmente compromessa e oscura, per me va bene.
In questo esempio inventato so che è possibile utilizzare solo double
per entrambe le variabili. Sto cercando una risposta generale.
Si prega di non suggerire di spostare nessuna delle variabili al di fuori del corpo, probabilmente non utilizzabile per me poiché uno è un iteratore che deve scomparire subito dopo il ciclo e l'istruzione for deve essere inclusa nella macro foreach
:
#define foreach(var, iter, instr) { \
typeof(iter) var##IT = iter; \
typeof(iter)::Element var = *var##IT; \
for (; var##_iterIT.is_still_ok(); ++var##IT, var = *var#IT) { \
instr; \
} \
}
può essere utilizzato in tal modo:
foreach(ii, collection, {
cout << ii;
}).
Ma ho bisogno di qualcosa che verrà utilizzato come quella:
foreach(ii, collection)
cout << ii;
Si prega di non introdurre alcun sovraccarico di runtime (ma potrebbe essere lento compilare).
Ti rendi conto che ci potrebbe non essere una soluzione che soddisfi tutte le condizioni che hai dato? –
"Per favore non suggerire di spostare nessuna delle variabili al di fuori del corpo, probabilmente non usabile per me perché l'iteratore deve scomparire subito dopo il ciclo." Sembra che tu abbia creato un requisito artificiale. Ciò che ti interessa è la portata dell'iteratore, non se è nel corpo del for. Cerca di spiegare * solo * le tue esigenze senza aggiungere le tue nozioni preconcette riguardo all'ambito dell'ambito. Sarà più facile per le persone capire il tuo problema e aiutarti. – dss539
ogni volta che qualcuno trova una soluzione, aggiungi un "Per favore non dire ....." e commenta "non utile ... cambia corpo ...." Perché lo fai ?? –