Copia un array in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione copy() per copiare un array in C++
  2. Usa la funzione copy_backward() per copiare un array
  3. Usa il metodo assign() per copiare un array
Copia un array in C++

Questo articolo introdurrà come copiare un array in C++.

Usa la funzione copy() per copiare un array in C++

Il metodo copy() è il modo consigliato per copiare strutture basate su intervalli con una singola chiamata di funzione. copy() prende il primo e l’ultimo elemento dell’intervallo e l’inizio dell’array di destinazione. Nota che potresti ottenere un comportamento indefinito se il terzo parametro è all’interno dell’intervallo di origine.

#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;
}

Produzione:

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

Usa la funzione copy_backward() per copiare un array

Il metodo copy_backward() può copiare un array in ordine inverso rispetto all’elemento originale, ma l’ordine viene mantenuto. Quando si copiano gli intervalli sovrapposti, c’è una regola pratica da tenere presente quando si usano i metodi std::copy e std::copy_backward: copy è appropriato quando si copia a sinistra (l’inizio dell’intervallo di destinazione è al di fuori dell’intervallo della sorgente). Al contrario, copy_backward è appropriato quando si copia a destra (la fine dell’intervallo di destinazione è al di fuori dell’intervallo di origine).

#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;
}

Usa il metodo assign() per copiare un array

assign() è un metodo integrato di un contenitore vector, che sostituisce il contenuto dell’oggetto chiamante vector con elementi passati dell’intervallo. Il metodo assign() potrebbe essere utile quando si copiano i vettori dei tipi che possono essere convertiti facilmente tra loro. Nel seguente esempio di codice, dimostriamo un modo per copiare un vettore char nel vettore int con una singola chiamata assign().

#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;
}

Produzione:

new_vec - | 97 | 98 | 99 | 100 | 101 |
Autore: 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

Articolo correlato - C++ Array