Heim >Backend-Entwicklung >C++ >Wie kann man einen Vektor effizient duplizieren und an sich selbst anhängen?

Wie kann man einen Vektor effizient duplizieren und an sich selbst anhängen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 01:53:13701Durchsuche

How to Efficiently Duplicate and Append a Vector to Itself?

Effizientes selbstanhängendes Vektoren

Sind Sie auf die Notwendigkeit gestoßen, den Inhalt eines Vektors zu duplizieren und an sich selbst anzuhängen? Wenn ja, suchen Sie möglicherweise nach einer eleganten Lösung, ohne auf explizite Schleifen zurückzugreifen.

Während std::vector::insert wie ein geeigneter Kandidat erscheint, zeigt die iterative Version undefiniertes Verhalten, wenn sie mit *this als verwendet wird Iterator. Darüber hinaus kann std::copy allein zu Segmentierungsfehlern führen.

Keine Angst! Es gibt einen einfachen und effizienten Ansatz, der zwei Schritte umfasst:

  1. Größe ändern: Erweitern Sie die Kapazität des Vektors, um die duplizierten Elemente aufzunehmen. Zu diesem Zweck können Sie entweder „Größe ändern“ oder „Reservieren“ verwenden.
  2. Kopieren: Verwenden Sie std::copy_n, um die ursprünglichen Elemente in den neu zugewiesenen Teil des Vektors zu übertragen.

Hier ist ein Beispiel für die Verwendung der Größenänderung:

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 Reserve zusammen mit verwenden std::back_inserter:

auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));

Beachten Sie, dass std::copy_n bei Verwendung von Reserve unbedingt erforderlich ist, da end() auf einen Punkt hinter dem Ende des Vektors zeigt, wodurch dieser als Einfügepunkt ungültig wird.

Die oben genannten Lösungen stellen sicher, dass der resultierende Vektor die ursprünglichen Elemente dupliziert und an sich selbst angehängt enthält, wodurch die Integrität der vorhandenen Elemente gewahrt bleibt und Neuzuweisungsvorgänge minimiert werden.

Das obige ist der detaillierte Inhalt vonWie kann man einen Vektor effizient duplizieren und an sich selbst anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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