C ++の配列の複製

C ++スタイルのコピー操作

STLにコピーアルゴリズムを使用して

int a[] = {1,2,3,4,5};
int b[5];
std::copy(std::begin(a),std::end(a),std::begin(b));
for(auto e:b) cout<<e<<" ";     // 输出 1,2,3,4,5

上記の手順で、コピーアルゴリズムは、移動を開始する(B)を開始するセグメント間隔に配列を複製します。

(C ++ 11)アレイのコンテナを使用します

std::array<int,5> arr = {1,2,3,4,5};
std::array<int,5> copy;
copy = arr;      // 将arr中的元素复制到copy中
arr[0] = 100;
for(auto e:copy) cout<<e<<" ";      //输出 1,2,3,4,5

Cスタイルのコピー操作

memcpy()を使用

int arr[] = {1,2,3,4,5};
int copy[5];
int len = sizeof(arr) / sizeof(arr[0]);
memcpy(copy,arr,len*sizeof(int));   // 输出 1,2,3,4,5
for(auto e:copy) cout<<e<<" ";

注:のmemcpy()関数は、第三のパラメータがコピーするバイト数ではなく、コピーされる要素の数であることを示します。この理由については、我々はのmemcpy()のプロトタイプを見ることができます。
void* memcpy(void* destination,const void* source,size_t num);

memcpy()関数のプロトタイプから見ることができ、関数の最初の2つのパラメータの型がvoid *型のものであり、これはポインタのいずれかのタイプにも適用することができます()のmemcpyを作るために行われます。

しかし、これは表現するために使用される配列の着信バイトの各要素のどれだけを知っていない)(memcpyの問題につながっています。なお、この理由は、このようなのmemcpy()3番目の引数は要素の数をコピーすることはできないが、バイト数をコピーするためでもあります。

MEMMOVEを使用してください()

この関数は、のmemcpy()は類似しているが、ソースおよび宛先は、例えば、位置と重なる可能MEMMOVE。

int arr[] = {1,2,3,4,5,6,7,8};
memmove(arr+3,arr+1,sizeof(int)*5);
for(auto e:arr) cout<<e<<" ";       // 输出 1,2,3,2,3,4,5,6

注:先の位置がソースと重なる場合などmemcpyのためMEMMOVE()は()も動作する可能性がある場合、上記の手順を、この挙動は予測不可能である、MEMMOVEを使用すべきです()。

転送:https://www.techforgeek.info/how_to_copy_array.html

おすすめ

転載: www.cnblogs.com/clwsec/p/11600899.html