web-dev-qa-db-ja.com

C配列をC ++のstd :: arrayに割り当てますか? (std :: array <T、U> = T [U])-「T [U]」から「std :: array <T、U>」までの適切なコンストラクターは存在しません

C配列をC++ std :: arrayに割り当てようとしています。

どうすれば、最もクリーンな方法で、不要なコピーを作成せずにそれを行うことができますか?

するとき

int X[8];
std::array<int,8> Y = X;

「適切なコンストラクタが存在しません」というコンパイラエラーが発生します。

19
Gizmo

プレーン配列からstd::arrayへの変換はありませんが、要素を一方から他方にコピーできます。

std::copy(std::begin(X), std::end(X), std::begin(Y));

これが実際の例です:

#include <iostream>
#include <array>
#include <algorithm>  // std::copy

int main() {
    int X[8] = {0,1,2,3,4,5,6,7};
    std::array<int,8> Y;
    std::copy(std::begin(X), std::end(X), std::begin(Y));
    for (int i: Y)
        std::cout << i << " ";
    std::cout << '\n';
    return 0;
}
21
juanchopanza