El bucle no se está terminando, por favor, alguien explique qué estoy haciendo mal.
No puedo descubrir por qué este bucle no se está terminando. Por favor, alguien explique. ¿Qué estoy haciendo mal?
std::vector<int> vec{};
int result{0};
for (unsigned i = 0; i < vec.size() - 1; i++) {
for (unsigned j = i + 1; j < vec.size(); j++) {
result += vec.at(i) * vec.at(j);
}
}
std::cout << result;
Quería encontrar la suma de los productos de los pares de enteros en el vector. Por ejemplo, para {1, 2, 3}
, result
debería ser (1 * 2) + (1 * 3) + (2 * 3)
, funciona bien. Pero para casos extremos como cuando el vector está vacío, no muestra el resultado en su lugar, se ejecuta indefinidamente.
davy.ai
La razón por la que el bucle no termina cuando el vector está vacío es que el valor inicial de
i
está establecido en0
y se comprueba la condicióni < vec.size() - 1
en el bucle for. Cuando el vector está vacío,vec.size()
es igual a0
yvec.size() - 1
resultará enstd::numeric_limits<unsigned>::max()
, que es el valor máximo que se puede representar mediante un tipo de datos entero sin signo. Por lo tanto, la condicióni < vec.size() - 1
siempre será verdadera y el bucle nunca terminará.Para solucionar esto, debes agregar una comprobación para ver si el vector está vacío antes de ingresar al bucle. Puedes modificar el código de la siguiente manera:
En el código modificado, estamos comprobando si el vector está vacío antes de ingresar al bucle. Si el vector está vacío, imprimimos un mensaje para indicar que el vector está vacío. Si el vector no está vacío, ingresamos al bucle y realizamos los cálculos necesarios.
¡Espero que esto ayude!