Code: Select all
std::vector vec = { ... }; // Actually a member variable on a Server object
for (auto iter = vec.begin(); iter != vec.end(); ) {
if (client_closed_connection(*iter)) {
*iter = std::move(*vec.back()); // Move item to delete to the end
vec.pop_back(); // perform deletion
// Dont increment cause we dont want to skip the newly moved element
} else {
process_client_request(*iter);
iter++;
}
}
< /code>
Ich verwende keine "Idiom" oder ähnlich "entfernen und löschen", da die Reihenfolge der Elemente keine Rolle spielt. Es scheint in der Praxis zu funktionieren, ich kann mich nicht wundern, ob ich mich möglicherweise auf Ub verlasse. Zuordnung), aber dann pop_back ()
bin ich garantiert, dass iter == end () , da Vector Legacyrandomaccessiderator verwendet, contiguous_iterator , da der Iteratortyp und die angesagten Speicheranforderungen, end () uld ul ul ul ul ul ul ul ul ul ul ul ul ul uld. /> Und warum gibt es keine Standardmethode, um Elemente zu entfernen, ohne die Bestellung zu erhalten?>