Kann der Back () Iterator eines Vektors nach einem pop_back () sicher als Ende () Iterator () angenommen werden?C++

Programme in C++. Entwicklerforum
Anonymous
 Kann der Back () Iterator eines Vektors nach einem pop_back () sicher als Ende () Iterator () angenommen werden?

Post by Anonymous »

Mein Problem ist Folgendes: < /p>

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 () 
, die nach Cpprefernce "iterator für das letzte Element als auch iterator ungültig macht". /> [*] Bedeutet "Ungültig gemacht" nur, dass ich den Iterator nicht Dereferenz nicht Dereference? (Was wäre in Ordnung, da ich es nur mit end () vergleiche ()
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?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post