118 votes

Existe-t-il une fonction pour copier un tableau en C/C++ ?

Je suis un programmeur Java qui apprend le C/C++. Je sais donc que Java possède une fonction comme System.arraycopy() ; pour copier un tableau. Je me demandais s'il existait une fonction en C ou C++ pour copier un tableau. Je n'ai pu trouver que la mise en œuvre de la copie d'un tableau en utilisant la boucle for, les pointeurs, etc. Existe-t-il une fonction que je peux utiliser pour copier un tableau ?

13voto

DrumM Points 455

J'aime la réponse de Ed S., mais cela ne fonctionne que pour les tableaux de taille fixe et pas lorsque les tableaux sont définis comme des pointeurs.

Donc, la solution C++ où les tableaux sont définis comme des pointeurs :

#include<algorithm>
...
const int bufferSize = 10;
char* origArray, newArray;
std::copy(origArray, origArray + bufferSize, newArray);

Nota : Aucun besoin de déduire buffersize avec 1 :

  1. Copie tous les éléments de la plage [premier, dernier] en commençant par le premier et en procédant au dernier - 1.

Voir : https://en.cppreference.com/w/cpp/algorithm/copy

11voto

Pete Becker Points 27371

En C, vous pouvez utiliser memcpy . En C++, utilisez std::copy de la <algorithm> en-tête.

6voto

Ankit Singh Points 304

Il suffit d'inclure la bibliothèque standard dans votre code.

#include<algorithm>

La taille du tableau sera désignée par n

Votre ancien Array

int oldArray[n]={10,20,30,40,50};

Déclarez un nouveau tableau dans lequel vous devez copier la valeur de votre ancien tableau.

int newArray[n];

Utilisez cette

copy_n(oldArray,n,newArray);

3voto

MORTAL Points 311

En C++11, vous pouvez utiliser Copy() qui fonctionne pour les conteneurs std

template <typename Container1, typename Container2>
auto Copy(Container1& c1, Container2& c2)
    -> decltype(c2.begin())
{
    auto it1 = std::begin(c1);
    auto it2 = std::begin(c2);

    while (it1 != std::end(c1)) {
        *it2++ = *it1++;
    }
    return it2;
}

3voto

Farid Chowdhury Points 1153

Je donne ici 2 façons de copier un tableau, pour le langage C et C++. memcpy y copia Les deux sont utilisables sur C++ mais copia n'est pas utilisable pour C, vous devez utiliser memcpy si vous essayez de copier un tableau en C.

#include <stdio.h>
#include <iostream>
#include <algorithm> // for using copy (library function)
#include <string.h> // for using memcpy (library function)

int main(){

    int arr[] = {1, 1, 2, 2, 3, 3};
    int brr[100];

    int len = sizeof(arr)/sizeof(*arr); // finding size of arr (array)

    std:: copy(arr, arr+len, brr); // which will work on C++ only (you have to use #include <algorithm>
    memcpy(brr, arr, len*(sizeof(int))); // which will work on both C and C++

    for(int i=0; i<len; i++){ // Printing brr (array).
        std:: cout << brr[i] << " ";
    }

    return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X