Effektives Duplizieren und Anhängen von Vektorinhalten
Bei der Arbeit mit Vektoren ist es oft notwendig, Elemente zu duplizieren und am Ende des Dokuments anzuhängen Originalvektor. Dies kann ohne Verwendung einer Schleife schwierig sein.
Herausforderungen mit iterativen Lösungen
Methoden wie std::vector::insert() sind für diese Aufgabe ungeeignet, da Iteratoren dies tun Der Vektor kann beim Einfügen ungültig werden.
Ein saubererer Ansatz mit Größenänderung und Copy_n
Eine elegantere Lösung umfasst zwei Schritte:
Hier sind zwei Beispielimplementierungen:
// Using resize() and copy_n() auto old_count = xx.size(); xx.resize(2 * old_count); std::copy_n(xx.begin(), old_count, xx.begin() + old_count); // Using reserve() and copy_n() via back_inserter() auto old_count = xx.size(); xx.reserve(2 * old_count); std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
In beiden Fällen wird die Größe des Originalvektors verdoppelt, um die Duplikate aufzunehmen, und eine copy_n()-Operation wird ausgeführt zur Übertragung der Elemente verwendet. Es ist wichtig, sich die ursprüngliche Vektorgröße zu merken, bevor Sie die Größe ändern und „reserve()“ mit „copy_n()“ verwenden, da der end()-Iterator nach der Neuzuweisung über das Ende des Vektors hinauszeigt.
Das obige ist der detaillierte Inhalt vonWie können Sie Vektorinhalte effizient duplizieren und anhängen, ohne Schleifen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!