Heim >Backend-Entwicklung >C++ >Wie kann man einen Vektor effizient duplizieren und an sich selbst anhängen?
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:
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!