Saltar al contenido

C++ bucle inverso ‘for’

Siéntete en la libertad de compartir nuestra página y códigos en tus redes, danos de tu ayuda para ampliar esta comunidad.

Solución:

¡Deja que el compilador te diga qué está mal!

Si compiló su programa con las advertencias habilitadas, el compilador le diría algo como esto:

: In function 'int main()':

7:43: warning: comparison of unsigned expression in '>= 0' is always true [-Wtype-limits]
    7 |     for(std::size_t i = vec.size() - 1; i >= 0; --i) {
      |                                         ~~^~~~

¿Porqué es eso? Eso es porque std::size_t es un no firmado escriba en C++; solo representa números no negativos. Obtenga más información sobre cómo activar las advertencias y por qué es importante: ¿Por qué siempre debo habilitar las advertencias del compilador?

Así que cómo debería iteramos a la inversa?

Decidí dividir mi respuesta aquí en una pregunta separada, independiente del error de OP. Por favor ve a leerlo.

El problema es ese size_t es un no firmado entero, es decir, sólo puede tener valores positivos. Cuando disminuye 0 para un tipo sin signo, ocurre un subdesbordamiento y el resultado suele ser el entero más grande representable por ese tipo, por ejemplo, 18446744073709223794 en su caso. Finalmente el cheque de i >= 0 es siempre true para cualquier tipo sin firmar y su ciclo nunca terminará.

Reseñas y valoraciones

Agradecemos que quieras añadir valor a nuestra información dando tu veteranía en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *