Elegante Lösung zum Anhängen eines Vektors an sich selbst
Das Duplizieren des Inhalts eines Vektors und das Anhängen an den Originalvektor ist ein häufiger Vorgang. Allerdings kann die effiziente Implementierung ohne Schleife eine Herausforderung sein.
Herausforderungsdiskussion
Die Frage verdeutlicht die Einschränkungen von std::vector::insert und std::copy für diese spezielle Aufgabe. std::vector::insert verbietet die Verwendung eines Iterators, um auf den aktuellen Vektor zu verweisen, und std::copy löst bei Verwendung in diesem Kontext einen Segmentierungsfehler aus.
Optimale Lösung
Die optimale Lösung besteht darin, std::vector::resize (oder std::vector::reserve) mit std::copy_n zu kombinieren. Der folgende Code demonstriert diesen Ansatz:
auto old_count = xx.size(); xx.resize(2 * old_count); std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
Alternativ können Sie std::vector::reserve und std::back_inserter:
auto old_count = xx.size(); xx.reserve(2 * old_count); std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
Erklärung verwenden
std::vector::resize ordnet den Vektor neu zu, wenn seine neue Größe seine alte Kapazität überschreitet. std::copy_n kopiert die angegebene Anzahl von Elementen vom Anfang des Vektors an eine neue Position.
Bei Verwendung von std::vector::reserve ist std::copy_n erforderlich, da der end()-Iterator zeigt ein Element hinter dem Ende des Vektors. Dies macht es für Einfügungen ungültig.
Fazit
Diese Lösung bietet eine präzise und effiziente Möglichkeit, den Inhalt eines Vektors an sich selbst anzuhängen, ohne auf eine schleifenbasierte Lösung zurückgreifen zu müssen Durchführung. Durch die Verwendung der Vorgänge „resize“ und „copy_n“ können Sie die gewünschte Funktionalität mit minimalem Code-Overhead erreichen.
Das obige ist der detaillierte Inhalt vonWie kann man einen Vektor ohne Schleife effizient an sich selbst anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!