Ein Element aus demselben Vektor verschieben
Bei bestimmten Vektoroperationen, wie z. B. push_back, muss die interne Kapazität möglicherweise neu zugewiesen werden. Dies kann Bedenken hinsichtlich der Gültigkeit von Verweisen auf vorherige Elemente im Vektor aufwerfen.
Eine solche Sorge entsteht, wenn ein Element aus demselben Vektor in sich selbst verschoben wird:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
Nach dem zweiten Push_back Bei dieser Operation ist es möglich, dass die Speicherzuordnung des Vektors geändert wurde, wodurch der Verweis auf die erste Ganzzahl (d. h. v[0]) ungültig wird.
Alternativ können Sie den folgenden Code berücksichtigen:
<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“ vor dem zweiten push_back stellen wir sicher, dass der Vektor über ausreichend Kapazität verfügt, um das neue Element ohne Neuzuweisung aufzunehmen. Dies garantiert, dass der Verweis auf die erste Ganzzahl auch nach der Operation gültig bleibt.
Basierend auf der vorgeschlagenen Lösung für den LWG-Fehlerbericht 526 wird davon ausgegangen, dass das erste Codebeispiel gültig ist, da vector::push_back erforderlich ist in solchen Szenarien zu arbeiten. Um jedoch die Gültigkeit von Verweisen auf frühere Elemente aufrechtzuerhalten, ist es ratsam, Reserve- oder Alternativmethoden zu verwenden, um mögliche Neuzuweisungen zu vermeiden.
Das obige ist der detaillierte Inhalt vonStellt Reserve die Gültigkeit von Vektorreferenzen beim Einfügen von Elementen sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!