Wie man ein Array in C++ kopiert

Jinku Hu 12 Oktober 2023
  1. Verwendung von die Funktion copy() zum Kopieren eines Arrays in C++
  2. Verwenden Sie die Funktion copy_backward(), um ein Array zu kopieren
  3. Verwendung von die Methode assign() zum Kopieren eines Arrays
Wie man ein Array in C++ kopiert

Dieser Artikel führt ein, wie man ein Array in C++ kopiert.

Verwendung von die Funktion copy() zum Kopieren eines Arrays in C++

Die copy() Methode ist der empfohlene Weg, bereichsbasierte Strukturen mit einem einzigen Funktionsaufruf zu kopieren. copy() nimmt das erste und das letzte Element des Bereichs und den Anfang des Zielarrays. Beachten Sie, dass Sie ein undefiniertes Verhalten erhalten könnten, wenn der dritte Parameter innerhalb des Quellbereichs liegt.

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"Warty",  "Hoary", "Breezy",
                            "Dapper", "Edgy",  "Feisty"};
  vector<string> new_vec(str_vec.size());

  copy(str_vec.begin(), str_vec.end(), new_vec.begin());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(),
       std::ostream_iterator<string>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

new_vec - | Warty | Hoary | Breezy | Dapper | Edgy | Feisty |

Verwenden Sie die Funktion copy_backward(), um ein Array zu kopieren

Die Methode copy_backward() kann ein Array in umgekehrter Reihenfolge mit dem ursprünglichen Element kopieren, aber die Reihenfolge bleibt erhalten. Beim Kopieren der sich überlappenden Bereiche gibt es eine Faustregel, die man bei der Verwendung der Methoden std::copy und std::copy_backward beachten sollte: copy ist geeignet, wenn man nach links kopiert (der Anfang des Zielbereichs liegt außerhalb des Quellbereichs). Im Gegensatz dazu ist copy_backward angemessen, wenn nach rechts kopiert wird (das Ende des Zielbereichs liegt außerhalb des Quellbereichs).

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::copy_backward;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"Warty",  "Hoary", "Breezy",
                            "Dapper", "Edgy",  "Feisty"};
  vector<string> new_vec(str_vec.size());

  copy_backward(str_vec.begin(), str_vec.end(), new_vec.end());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(),
       std::ostream_iterator<string>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Verwendung von die Methode assign() zum Kopieren eines Arrays

assign() ist eine eingebaute Methode eines vector-Containers, die den Inhalt des aufrufenden vector-Objekts durch übergebene Elemente des Bereichs ersetzt. Die Methode assign() könnte nützlich sein, wenn man die Vektoren der Typen kopiert, die leicht ineinander konvertiert werden können. Im folgenden Code-Beispiel demonstrieren wir eine Möglichkeit, einen char-Vektor mit einem einzigen assign-Aufruf in den int-Vektor zu kopieren.

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> char_vec{'a', 'b', 'c', 'd', 'e'};
  vector<int> new_vec(char_vec.size());

  new_vec.assign(char_vec.begin(), char_vec.end());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

new_vec - | 97 | 98 | 99 | 100 | 101 |
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Array