Avatar ·

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.