আপনি স্বয়ংক্রিয়ভাবে অ্যারের আকারটি 'শিখতে' পারবেন:
template<typename T, size_t N>
void set_data(const T (&w)[N]){
w_.assign(w, w+N);
}
আশা করি, আপনি উপরের মতো ইন্টারফেসটি সেট_ডেটাতে পরিবর্তন করতে পারবেন। এটি এখনও সি-স্টাইল অ্যারেটিকে তার প্রথম যুক্তি হিসাবে স্বীকার করে। এটি কেবল রেফারেন্সের দ্বারা এটি নেওয়া হয়।
কিভাবে এটা কাজ করে
[আপডেট: আকার শেখার জন্য আরও বিস্তৃত আলোচনার জন্য এখানে দেখুন ]
এখানে আরও সাধারণ সমাধান:
template<typename T, size_t N>
void copy_from_array(vector<T> &target_vector, const T (&source_array)[N]) {
target_vector.assign(source_array, source_array+N);
}
এটি কাজ করে কারণ অ্যারেটি রেফারেন্স-থেকে-অ্যারে হিসাবে পাস হচ্ছে। সি / সি ++ এ আপনি কোনও ক্রিয়া হিসাবে কোনও অ্যারে পাস করতে পারবেন না, পরিবর্তে এটি পয়েন্টারের ক্ষয়ে যাবে এবং আপনি আকারটি হারাবেন। তবে সি ++ এ আপনি অ্যারেতে একটি রেফারেন্স পাস করতে পারেন ।
রেফারেন্স সহ একটি অ্যারে পাস করার জন্য ধরণের হুবহু মিলে যায়। একটি অ্যারের আকার তার ধরণের একটি অংশ। এর অর্থ আমরা আমাদের জন্য আকারটি জানতে টেমপ্লেট প্যারামিটার এন ব্যবহার করতে পারি।
এটি কোনও ভেক্টরকে ফিরিয়ে দেয় এমন ফাংশনটি এমনকি সহজ হতে পারে। কার্যকর সংকলক অপ্টিমাইজেশান কার্যকর হিসাবে, এটি দেখতে এটির চেয়ে দ্রুত হওয়া উচিত।
template<typename T, size_t N>
vector<T> convert_array_to_vector(const T (&source_array)[N]) {
return vector<T>(source_array, source_array+N);
}