Regras de invalidação de iteradores em C++: quando os iteradores se tornam inválidos?
Olá a todos! Comecei a estudar C++ e estou escrevendo um pequeno programa para processar uma lista de pedidos. Estou usando `std::vector`. Aqui está o código simplificado:
```cpp
#include
#include
int main() {
std::vector orders = {101, 102, 103, 104, 105};
// Procuramos o pedido 103 e o removemos
for (auto it = orders.begin(); it != orders.end(); ++it) {
if (*it == 103) {
orders.erase(it); // <-- aqui eu removo o elemento
}
}
// Exibimos os pedidos restantes
for (int order : orders) {
std::cout << order << " ";
}
return 0;
}
```
No Visual Studio 2022, este código às vezes falha com um erro, e às vezes exibe números estranhos. Eu li que isso está relacionado à "invalidação de iteradores", mas não entendo completamente o que isso significa.
Minhas perguntas:
1. Por que meu código quebra?
2. Quais operações com containers tornam os iteradores inválidos?
3. Como remover elementos corretamente durante a iteração?
Agradeço desde já por uma resposta detalhada.