Iteração sobre std::vector: índice unsigned vs signed — qual escolher?
Olá a todos! Recentemente comecei a estudar C++ e me deparei com um problema ao iterar sobre `std::vector`. Quando escrevo um loop, geralmente uso `int i`, mas o compilador (GCC) emite um aviso sobre comparação entre signed e unsigned. Aqui está um exemplo:
```cpp
#include
#include
int main() {
std::vector vec = {1, 2, 3, 4, 5};
for (int i = 0; i < vec.size(); ++i) { // aviso: comparação signed/unsigned
std::cout << vec[i] << " ";
}
return 0;
}
```
Aviso: `warning: comparison between signed and unsigned integer expressions [-Wsign-compare]`.
Eu entendo que `vec.size()` retorna `size_t` (unsigned), enquanto `i` é `int` (signed). Se eu mudar `int` para `size_t` ou `unsigned int`, o aviso desaparece. Mas então não posso usar `i >= 0` em loops reversos, porque `size_t` nunca é negativo, e o loop se torna infinito.
Pergunta: qual tipo é melhor usar para o índice ao iterar sobre um vetor? Vale