Puede definir 2 variables del mismo tipo en un bucle for:¿Hay alguna manera de definir variables de dos tipos diferentes en un inicializador for loop?
int main() {
for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
pero es ilegal para definir las variables de diferentes tipos:
int main() {
for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
¿Hay una manera de hacer esto? (No necesito usar i
dentro del ciclo, solo j
.)
Si tiene una solución totalmente pirateada y oscura, está bien para mí.
En este ejemplo ideado, sé que podría usar double
para ambas variables. Estoy buscando una respuesta general.
Por favor, no sugiera mover ninguna de las variables fuera del cuerpo, probablemente no se pueda usar ya que una es un iterador que debe desaparecer justo después del bucle y la instrucción para se debe encerrar en mi 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; \
} \
}
se puede utilizar así:
foreach(ii, collection, {
cout << ii;
}).
pero necesito algo que va a ser utilizado como esa:
foreach(ii, collection)
cout << ii;
No introduzca ninguna sobrecarga de tiempo de ejecución (pero puede tardar en compilarse).
¿Se da cuenta de que podría ¿No habrá ninguna solución que satisfaga todas las condiciones que has dado? –
"No sugiero que mueva ninguna de las variables fuera del cuerpo, probablemente no se pueda usar porque el iterador debe desaparecer justo después del bucle". Parece que ha creado un requisito artificial. Lo que más te importa es el alcance del iterador, no si está en el cuerpo del for. Intente explicar * solo * sus requisitos sin agregar sus nociones preconcebidas sobre el alcance. Será más fácil para las personas entender su problema y ayudarlo. – dss539
cada vez que alguien presenta una solución, agrega un "Por favor, no diga ....." y comente "no es útil ... cambia de cuerpo ..." ¿Por qué lo hace? –