सी ++ में इसे कैसे करें ??
सबसे आसान समाधान std::copy
का उपयोग करना है जैसा कि दूसरों ने कहा था। memcpy
सी ++ में उपयोग करें, std::copy
पीओडी के लिए समान है लेकिन गैर-पीओडी के लिए भी लागू है और केवल सही चीज है। यदि आपके सरणी में टाइप एक दिन बदलता है, तो आपको उन सभी स्थानों पर फिर से जाना होगा जहां आप ऐसी प्रतिलिपि करते हैं और memcpy
को प्रतिस्थापित करते हैं। (और आप स्थानों में से किसी एक को याद करते हैं और बग को खोजने में कठिनाई होती है)। C++ में memcpy
का उपयोग करने से कोई लाभ नहीं है, इसलिए शुरुआत से std::copy
का उपयोग करें।
बेहतर समाधान इस मामले में उपयोग सी ++ डेटा संरचनाओं होगा, का उपयोग करें, std::array
#include <array>
struct sample {
int x;
int y;
std::array<int, 10> arr; //C++ array instead of plain C array
};
int main()
{
std::array<int, 10> arr2 = {0, 1, 2, 4, 3, 2, 2, 1, 5, 5};
int a = 19;
int b = 22;
// 1: no need to say "struct sample*" since C++98
// 2: prefer to use smart pointers..
//sample* samp = new sample;
std::unique_ptr<sample> samp(new sample());
samp->x = a;
samp->y = b;
samp->arr = arr2; //it's as easy as it should be!
// 3: ... so ypu can't forget to delete!
//delete samp;
}
संपादित करें: मैं यहाँ unique_ptr इस्तेमाल किया है, हालांकि यह थोड़ा उदाहरण में आप की जरूरत नहीं है ढेर आवंटन का उपयोग करने के लिए बिल्कुल। ग्रिजेश के प्रारंभिकरण में भी लाने के लिए:
int main()
{
std::array<int, 10> arr2 = {0, 1, 2, 4, 3, 2, 2, 1, 5, 5};
int a = 19;
int b = 22;
sample samp = {a, b, arr2}; //done!
}
कोई आवंटन, कोई सफाई नहीं, कोई तत्व-वार असाइनमेंट की आवश्यकता नहीं है।
कच्चे सरणी का उपयोग करना बंद करें और ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) या [' std :: array'] (http://en.cppreference.com/w/cpp/container/array)। –
बस अगर आपने प्राथमिक सलाह को गंभीरता से नहीं लिया है। यदि आप सी ++ करना चाहते हैं, तो सामान्य रूप से std :: वेक्टर, और मानक लाइब्रेरी कंटेनर का उपयोग करें। –
अपना ** नमूना बदलें -> ** ** ** सैंप -> **। ** नमूना ** टैग नाम है और इस तरह इस्तेमाल नहीं किया जा सकता है। –