Başkalarının da bahsettiği gibi, C'de kullanırsınız memcpy. Bununla birlikte, bunun bir ham bellek kopyası yaptığına dikkat edin, bu nedenle veri yapılarınız kendilerine veya birbirlerine göstericiye sahipse, kopyadaki işaretçiler yine de orijinal nesneleri gösterecektir.
C ++ da kullanabilirsiniz memcpydiziniz üyeleri, (ayrıca C değişmeden kullanmış olabilir, esasen türleri) ama genel olarak POD ise memcpyedecektir değil izin verilebilir. Diğerlerinde belirtildiği gibi, kullanılacak işlev std::copy.
Bunu söyledikten sonra, C ++ 'da nadiren ham dizileri kullanmalısınız. Bunun yerine ya standart konteynerlerin birini kullanmalıdır ( std::vectorbir dizide dahili ve ayrıca Java diziler en yakın düşünmek en yakın - yakın düz C'nin ++ diziler, gerçekten de - ama std::dequeya std::listbazı durumlarda daha uygun olabilir) veya std::arrayyerleşik dizilere çok yakın olan, ancak diğer C ++ türleri gibi değer semantiği olan C ++ 11 kullanıyorsanız . Burada bahsettiğim tüm türler ödev veya kopya oluşturma yoluyla kopyalanabilir. Dahası, yineleyici sözdizimini kullanarak opne'den diğerine (ve hatta yerleşik bir diziden) "çapraz kopyalama" yapabilirsiniz.
Bu, olasılıklara genel bir bakış sağlar (ilgili tüm başlıkların dahil edildiğini varsayıyorum):
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 memmoveveman memcpy