[C++] 配列をコピーする方法 (copy, memcpy)

配列のすべての値を別の配列にコピーするさまざまな方法を紹介します。

1. std::copy() を使った方法

std::copy(first, last, d_first) は、配列の最初の位置から最後の位置の間の要素を別の配列 d_first にコピーします。 d_firstはコピーしたい配列の最初の位置です。

以下のように配列をコピーできます。

#include <iostream>
#include <algorithm>
#include <iterator>


int main() {
    int arr[] = {1, 2, 3, 4, 5};

    int dest[5];
    std::copy(std::begin(arr), std::end(arr), std::begin(dest));

    for (int &i: dest) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

1 2 3 4 5

1.1 std::copy_n() を使った方法

std::copy_n(first, count, result) は、配列 first から count 個数だけ result 配列にコピーします。

以下のように配列をコピーできます。

#include <iostream>
#include <algorithm>
#include <iterator>


int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = 5;

    int dest[size];

    std::copy_n(arr, size, dest);

    for (int &i: dest) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

1 2 3 4 5

2. std::memcpy() を使った方法

std::memcpy(dest, src, count) は src の配列から count の数だけ dest 配列にコピーします。

以下のように配列をコピーできます。

#include <iostream>
#include <cstring>

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    int dest[5];
    std::memcpy(&dest, &arr, sizeof(arr));

    for (int &i: dest) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

1 2 3 4 5

3. 繰り返し文に直接コピーする方法

forステートメントを使用して、次のように直接配列をコピーできます。

#include <iostream>
#include <cstring>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = 5;

    int dest[size];
    for (int i = 0; i < size; i++) {
        dest[i] = arr[i];
    }

    for (int &i: dest) {
        std::cout << i << ' ';
    }

    return 0;
}

Output:

1 2 3 4 5
codechachaCopyright ©2019 codechacha