এখানে অনেক উত্তর এসেছে এবং প্রায় সবগুলিই কাজটি সম্পন্ন করবে।
তবে কিছু বিভ্রান্তিকর পরামর্শ আছে!
এখানে বিকল্পগুলি:
vector<int> dataVec;
int dataArray[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
unsigned dataArraySize = sizeof(dataArray) / sizeof(int);
// Method 1: Copy the array to the vector using back_inserter.
{
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 2: Same as 1 but pre-extend the vector by the size of the array using reserve
{
dataVec.reserve(dataVec.size() + dataArraySize);
copy(&dataArray[0], &dataArray[dataArraySize], back_inserter(dataVec));
}
// Method 3: Memcpy
{
dataVec.resize(dataVec.size() + dataArraySize);
memcpy(&dataVec[dataVec.size() - dataArraySize], &dataArray[0], dataArraySize * sizeof(int));
}
// Method 4: vector::insert
{
dataVec.insert(dataVec.end(), &dataArray[0], &dataArray[dataArraySize]);
}
// Method 5: vector + vector
{
vector<int> dataVec2(&dataArray[0], &dataArray[dataArraySize]);
dataVec.insert(dataVec.end(), dataVec2.begin(), dataVec2.end());
}
একটি দীর্ঘ গল্পের সংক্ষিপ্ত পদ্ধতি 4 কাটা, ভেক্টর :: সন্নিবেশ ব্যবহার করে বিস্রুতের দৃশ্যের জন্য সেরা।
এখানে কিছু বিষণ্ণ বিবরণ দেওয়া হল:
পদ্ধতি 1 বোঝার জন্য সম্ভবত সবচেয়ে সহজ। অ্যারে থেকে কেবল প্রতিটি উপাদান অনুলিপি করুন এবং এটি ভেক্টরের পিছনে চাপুন। হায়রে, এটা ধীর। যেহেতু একটি লুপ আছে (অনুলিপি ফাংশন দিয়ে বোঝানো), প্রতিটি উপাদান পৃথকভাবে চিকিত্সা করা উচিত; আরে এবং ভেক্টরগুলি সংকীর্ণ ব্লকগুলি এই সত্যের ভিত্তিতে কোনও পারফরম্যান্সের উন্নতি করা যায় না।
পদ্ধতি 2 পদ্ধতি 1 এর প্রস্তাবিত কার্যকারিতা উন্নতি; অ্যারের যোগ করার আগে এটির আকারটি কেবল সংরক্ষণ করুন। বড় অ্যারেগুলির জন্য এটি সহায়তা করতে পারে। তবে এখানে সর্বোত্তম পরামর্শটি কখনই রিজার্ভ ব্যবহার করা উচিত নয় যতক্ষণ না প্রোফাইলিং পরামর্শ দেয় আপনি উন্নতি করতে সক্ষম হতে পারেন (বা আপনার পুনরুক্তিগুলি অবৈধ হতে যাচ্ছে না তা নিশ্চিত করার প্রয়োজন)। বর্জন একমত । ঘটনাক্রমে, আমি দেখতে পেয়েছি যে এই পদ্ধতিটি বেশিরভাগ সময়ই সবচেয়ে ধীরে সম্পাদিত হয়েছিল যদিও আমি বিস্তৃতভাবে ব্যাখ্যা করার জন্য লড়াই করছি যে কেন এটি নিয়মিতভাবে পদ্ধতি 1 এর চেয়ে উল্লেখযোগ্যভাবে ধীর হয় ...
পদ্ধতি 3 হ'ল পুরাতন স্কুল সমাধান - সমস্যাটিতে কিছু সি ফেলে দিন! পিওডি ধরণের জন্য সূক্ষ্ম এবং দ্রুত কাজ করে। এক্ষেত্রে মাইজপি ভেক্টরের সীমানার বাইরে কাজ করে এবং কোনও ভেক্টরকে বলার উপায় নেই যে এর আকার পরিবর্তন হয়েছে। কদর্য সমাধান ছাড়াও (বাইট অনুলিপি করুন!) মনে রাখবেন যে এটি কেবল পিওডি ধরণের জন্য ব্যবহার করা যেতে পারে । আমি এই সমাধানটি কখনই ব্যবহার করব না।
পদ্ধতি 4 যাওয়ার সর্বোত্তম উপায়। এর অর্থ পরিষ্কার, এটি (সাধারণত) দ্রুত এবং এটি কোনও বস্তুর জন্য কাজ করে। এই অ্যাপ্লিকেশনটির জন্য এই পদ্ধতিটি ব্যবহার করার কোনও খারাপ দিক নেই।
পদ্ধতি 5 পদ্ধতি 4 তে একটি সাম্প্রতিক চিহ্ন - অ্যারেটিকে একটি ভেক্টরে অনুলিপি করুন এবং তারপরে এটি যুক্ত করুন। ভাল বিকল্প - সাধারণত দ্রুত-ইশ এবং পরিষ্কার।
অবশেষে, আপনি সচেতন যে আপনি অ্যারের জায়গায় ভেক্টর ব্যবহার করতে পারেন, তাই না? এমনকি যখন কোনও ফাংশন সি-স্টাইলের অ্যারেগুলি প্রত্যাশা করে আপনি ভেক্টরগুলি ব্যবহার করতে পারেন:
vector<char> v(50); // Ensure there's enough space
strcpy(&v[0], "prefer vectors to c arrays");
আশা করি সেখানকার কাউকে সাহায্য করবে!