Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann man einen Vektor ohne Schleife effizient an sich selbst anhängen?

Barbara Streisand
Freigeben: 2024-11-09 01:23:02
Original
525 Leute haben es durchsucht

How to Efficiently Append a Vector to Itself Without a Loop?

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);
Nach dem Login kopieren

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));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage