while usando que programacion lenguaje for estructura else ejemplos ciclo c++ scope declaration for-loop

c++ - usando - lenguaje c if else ejemplos



¿Es posible declarar dos variables de diferentes tipos en un ciclo for? (6)

Consulte " ¿Hay alguna forma de definir variables de dos tipos en for loop? " Para otra forma de anidar múltiples bucles for. La ventaja de la otra manera sobre el "truco de estructuras" de Georg es que (1) le permite tener una mezcla de variables locales estáticas y no estáticas y (2) le permite tener variables que no se pueden copiar. La desventaja es que es mucho menos legible y puede ser menos eficiente.

¿Es posible declarar dos variables de diferentes tipos en el cuerpo de inicialización de un bucle for en C ++?

Por ejemplo:

for(int i=0,j=0 ...

define dos enteros. ¿Puedo definir un int y un char en el cuerpo de inicialización? ¿Cómo se haría esto?


Definir una macro:

#define FOR( typeX,x,valueX, typeY,y,valueY, condition, increments) typeX x; typeY y; for(x=valueX,y=valueY;condition;increments) FOR(int,i,0, int,f,0.0, i < 5, i++) { //... }

Solo recuerde, sus ámbitos variables tampoco estarán dentro del bucle for de esta manera.


No es posible, pero puedes hacer:

float f; int i; for (i = 0,f = 0.0; i < 5; i++) { //... }

O bien, limite explícitamente el alcance de f usando paréntesis adicionales:

{ float f; int i; for (i = 0,f = 0.0; i < 5; i++) { //... } }


No puede declarar varios tipos en la inicialización, pero puede asignar varios tipos EG

{ int i; char x; for(i = 0, x = ''p''; ...){ ... } }

Simplemente declare en su propio alcance.


No, pero técnicamente hay una solución alternativa (no es que realmente la use a menos que me obliguen a hacerlo):

for(struct { int a; char b; } s = { 0, ''a'' } ; s.a < 5 ; ++s.a) { std::cout << s.a << " " << s.b << std::endl; }


C ++ 17 : debe usar una declaración de enlace estructurado . La sintaxis es compatible con gcc-7 y clang-4.0 ( ejemplo vivo de clang ). Esto nos permite desempaquetar una tupla como esta:

for (auto [i, f] = std::tuple{1, 1.0}; i < N; ++i) { /* ... */ }

C ++ 14 : puede hacer lo mismo que C ++ 11 (abajo) con la adición de std::get basado en tipo. Entonces, en lugar de std::get<0>(t) en el ejemplo siguiente, puede tener std::get<int>(t) .

C ++ 11 : std::make_pair permite hacer esto, así como std::make_tuple para más de dos objetos.

for (auto p = std::make_pair(5, std::string("Hello World")); p.first < 10; ++p.first) { std::cout << p.second << std::endl; }

std::make_pair devolverá los dos argumentos en un std::pair . Se puede acceder a los elementos con .second y .second .

Para más de dos objetos, necesitarás usar un std::tuple

for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{}); std::get<0>(t) < 10; ++std::get<0>(t)) { std::cout << std::get<1>(t) << std::endl; // cout Hello world std::get<2>(t).push_back(std::get<0>(t)); // add counter value to the vector }

std::make_tuple es una plantilla variadica que construirá una tupla de cualquier cantidad de argumentos (con algunas limitaciones técnicas, por supuesto). Se puede acceder a los elementos por índice con std::get<INDEX>(tuple_object)

Dentro de los cuerpos de bucle for puede alias fácilmente los objetos, aunque todavía necesita usar .first o std::get para la condición de bucle for y actualizar la expresión

for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{}); std::get<0>(t) < 10; ++std::get<0>(t)) { auto& i = std::get<0>(t); auto& s = std::get<1>(t); auto& v = std::get<2>(t); std::cout << s << std::endl; // cout Hello world v.push_back(i); // add counter value to the vector }

C ++ 98 y C ++ 03 Puede nombrar explícitamente los tipos de un std::pair . Sin embargo, no hay una forma estándar de generalizar esto en más de dos tipos:

for (std::pair<int, std::string> p(5, "Hello World"); p.first < 10; ++p.first) { std::cout << p.second << std::endl; }