Iteración sobre std::vector: índice unsigned vs signed — ¿cuál elegir?
¡Hola a todos! Recientemente comencé a estudiar C++ y me encontré con un problema al iterar sobre `std::vector`. Cuando escribo un bucle, normalmente uso `int i`, pero el compilador (GCC) emite una advertencia sobre la comparación entre signed y unsigned. Aquí hay un ejemplo:
```cpp
#include
#include
int main() {
std::vector vec = {1, 2, 3, 4, 5};
for (int i = 0; i < vec.size(); ++i) { // advertencia: comparación signed/unsigned
std::cout << vec[i] << " ";
}
return 0;
}
```
Advertencia: `warning: comparison between signed and unsigned integer expressions [-Wsign-compare]`.
Entiendo que `vec.size()` devuelve `size_t` (unsigned), mientras que `i` es `int` (signed). Si cambio `int` a `size_t` o `unsigned int`, la advertencia desaparece. Pero entonces no puedo usar `i >= 0` en bucles inversos, porque `size_t` nunca es negativo y el bucle se vuelve infinito.
Pregunta: ¿qué tipo es mejor usar para el índice al iterar sobre un vector? ¿Debería siempre usar