অন্যরা যেমন উল্লেখ করেছে, সি তে আপনি ব্যবহার করবেন memcpy
। তবে এটি একটি কাঁচা মেমরি অনুলিপি করে তা নোট করুন, সুতরাং আপনার ডেটা স্ট্রাকচারগুলিতে যদি নিজের বা একে অপরের দিকে পয়েন্টার থাকে তবে অনুলিপিটির পয়েন্টারগুলি এখনও মূল বস্তুগুলিকে নির্দেশ করবে।
সি ++ এ memcpy
আপনিও ব্যবহার করতে পারেন যদি আপনার অ্যারে সদস্যরা পিওডি হন (এটি মূলত প্রকার যা আপনি সি তেও অপরিবর্তিত ব্যবহার করতে পারেন) তবে সাধারণভাবে এর অনুমতি দেওয়া memcpy
হবে না । অন্যরা যেমন উল্লেখ করেছে, ব্যবহার করার কাজটি হচ্ছে std::copy
।
যা বলেছিলেন, সি ++ এ আপনার খুব কমই কাঁচা অ্যারে ব্যবহার করা উচিত। পরিবর্তে আপনি হয় স্ট্যান্ডার্ড পাত্রে একটি ব্যবহার করুন ( std::vector
একটি অন্তর্নির্মিত অ্যারে সবচেয়ে কাছাকাছি, এবং আমি জাভা অ্যারে সবচেয়ে কাছাকাছি মনে করি - স্পষ্টত C ++ অ্যারের তুলনায়, তবে - std::deque
বা std::list
কিছু ক্ষেত্রে আরও উপযুক্ত হতে পারে) বা, আপনি যদি সি ++ 11 ব্যবহার করেন std::array
যা অন্তর্নির্মিত অ্যারেগুলির খুব কাছে, তবে অন্যান্য সি ++ প্রকারের মতো মান শব্দার্থক সহ। আমি এখানে উল্লিখিত সমস্ত ধরণের অ্যাসাইনমেন্ট বা অনুলিপি নির্মাণের মাধ্যমে অনুলিপি করা যেতে পারে। তদ্ব্যতীত, আপনি পুনরুক্তি সিনট্যাক্স ব্যবহার করে অপেন থেকে অন্য (এবং এমনকি বিল্ট-ইন অ্যারে থেকে) "ক্রস-অনুলিপি" করতে পারেন।
এটি সম্ভাবনার একটি ওভারভিউ দেয় (আমি ধরে নিই যে সমস্ত প্রাসঙ্গিক শিরোনাম অন্তর্ভুক্ত করা হয়েছে):
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