Elemente aus demselben Vektor verschieben: Sicherheitsmaßnahmen
Die Sicherheit beim Zurückschieben eines Elements aus demselben Vektor hängt von der Möglichkeit einer Neuzuordnung ab , wodurch Verweise auf vorhandene Vektorelemente ungültig werden können. Dieses Problem tritt im folgenden Beispiel auf:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Wenn der zweite push_back eine Neuzuweisung auslöst, wird der Verweis auf v[0] ungültig. Um dies zu beheben, kann der folgende Ansatz verwendet werden:
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
Durch den Aufruf von „reserve“ fordern wir explizit ausreichend Speicher an, um sicherzustellen, dass bei nachfolgenden Einfügungen keine Neuzuweisung erfolgt.
Gemäß dem C-Standard , wird das Verhalten von push_back in Bezug auf Elementreferenzen nicht explizit als Fehler definiert, auch wenn es möglicherweise zu ungültigen Referenzen führen könnte. Dies liegt daran, dass der Standard erfordert, dass vector::insert ordnungsgemäß funktioniert, auch wenn durch das Einfügen die Positionen anderer Elemente geändert werden.
Das obige ist der detaillierte Inhalt vonWie kann die Sicherheit beim Schieben von Elementen aus demselben Vektor gewährleistet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!