Comment copier un tableau en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction copy() pour copier un tableau en C++
  2. Utilisez la fonction copy_backward() pour copier un tableau
  3. Utiliser la méthode assign() pour copier un tableau
Comment copier un tableau en C++

Cet article présente la manière de copier un tableau en C++.

Utilisez la fonction copy() pour copier un tableau en C++

La méthode copy() est la méthode recommandée pour copier des structures basées sur des plages avec un seul appel de fonction. La méthode copy() prend le premier et le dernier élément de la plage et le début du tableau de destination. Notez que vous pouvez obtenir un comportement indéfini si le troisième paramètre est dans la plage source.

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

Production:

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

Utilisez la fonction copy_backward() pour copier un tableau

La méthode copy_backward() peut copier un tableau en ordre inverse avec l’élément original, mais l’ordre est préservé. Lorsque l’on copie les plages qui se chevauchent, il y a une règle empirique à respecter lorsqu’on utilise les méthodes std::copy et std::copy_backward : copy est approprié lorsque l’on copie vers la gauche (le début de la plage de destination est en dehors de la plage source). En revanche, copy_backward est approprié pour une copie vers la droite (la fin de la plage de destination est en dehors de la plage source).

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

Utiliser la méthode assign() pour copier un tableau

assign() est une méthode intégrée d’un conteneur vector, qui remplace le contenu de l’objet vector appelant par les éléments passés de la gamme. La méthode assign() peut être utile pour copier les vecteurs de types qui peuvent être facilement convertis les uns aux autres. Dans l’exemple de code suivant, nous démontrons une façon de copier un vecteur char dans le vecteur int avec un seul appel 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;
}

Production:

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

Article connexe - C++ Array