Heim >Backend-Entwicklung >C++ >Wie können Sie Vektorinhalte effizient duplizieren und anhängen, ohne Schleifen zu verwenden?

Wie können Sie Vektorinhalte effizient duplizieren und anhängen, ohne Schleifen zu verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-28 00:52:12681Durchsuche

How Can You Efficiently Duplicate and Append Vector Contents Without Using Loops?

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:

  1. Größe des Vektors ändern: Verwenden Sie resize() oder reserve(), um Speicher für zu reservieren Elemente duplizieren.
  2. Elemente kopieren: Verwenden Sie std::copy_n(), um die ursprünglichen Elemente zu kopieren ihre Duplikatpositionen.

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!

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