他の人が述べたように、Cではを使用しますmemcpy
。ただし、これは生のメモリコピーを実行するため、データ構造にそれ自体または相互へのポインタがある場合でも、コピー内のポインタは元のオブジェクトを指していることに注意してください。
C ++ではmemcpy
、配列メンバーがPOD(つまり、基本的にCでも変更せずに使用できたタイプ)の場合にも使用できますが、通常は許可memcpy
されません。他の人が述べたように、使用する関数はstd::copy
です。
そうは言っても、C ++では、生の配列を使用することはめったにありません。代わりに、標準コンテナの1つを使用する必要があります(std::vector
組み込み配列に最も近く、Java配列に最も近いと思います—実際にはプレーンC ++配列よりも近いですがstd::deque
、std::list
場合によってはより適切な場合もあります)または、std::array
組み込み配列に非常に近いが、他のC ++タイプと同様の値セマンティクスを持つC ++ 11を使用する場合。ここで説明したすべてのタイプは、割り当てまたはコピー作成によってコピーできます。さらに、イテレータ構文を使用して、opneから別のopneに(さらには組み込み配列から)「クロスコピー」することができます。
これにより、可能性の概要がわかります(関連するすべてのヘッダーが含まれていると思います)。
int main()
{
int a[] = { 1, 2, 3, 4 };
int b[4];
memcpy(b, a, 4*sizeof(int));
std::copy(a, a+4, b);
std::copy(std::begin(a), std::end(a), std::begin(b));
std::vector<int> va(a, a+4);
std::vector<int> vb = va;
std::vector<int> vc { 5, 6, 7, 8 };
vb = vc;
vb.assign(vc.begin(), vc.end());
std::vector<int> vd;
std::copy(va.begin(), va.end(), std::back_inserter(vd));
std::copy(a, a+4, vd.begin());
std::array<int, 4> sa = { 9, 10, 11, 12 };
std::array<int, 4> sb = sa;
sb = sa;
}
man memmove
およびman memcpy