এটি করা যেতে পারে তবে পরিষ্কারভাবে কয়েক ধাপ নিতে হবে। প্রথমে এমন একটি লিখুন template classযা বিভিন্ন মানের সংলগ্ন মানের প্রতিনিধিত্ব করে। তারপরে এমন একটি templateসংস্করণ ফরোয়ার্ড করুন যা জানে যে এই সংস্করণটি arrayগ্রহণযোগ্য সংস্করণে কত বড় Impl।
অবশেষে, contig_rangeসংস্করণটি প্রয়োগ করুন । নোট for( int& x: range )যেটির জন্য কাজ করে contig_range, কারণ আমি প্রয়োগ করেছি begin()এবং end()এবং পয়েন্টারগুলি পুনরাবৃত্তকারী।
template<typename T>
struct contig_range {
T* _begin, _end;
contig_range( T* b, T* e ):_begin(b), _end(e) {}
T const* begin() const { return _begin; }
T const* end() const { return _end; }
T* begin() { return _begin; }
T* end() { return _end; }
contig_range( contig_range const& ) = default;
contig_range( contig_range && ) = default;
contig_range():_begin(nullptr), _end(nullptr) {}
template<typename T, std::size_t N>
contig_range( std::array<T, N>& arr ): _begin(&*std::begin(arr)), _end(&*std::end(arr)) {}
template<typename T, std::size_t N>
contig_range( T(&arr)[N] ): _begin(&*std::begin(arr)), _end(&*std::end(arr)) {}
template<typename T, typename A>
contig_range( std::vector<T, A>& arr ): _begin(&*std::begin(arr)), _end(&*std::end(arr)) {}
};
void mulArrayImpl( contig_range<int> arr, const int multiplier );
template<std::size_t N>
void mulArray( std::array<int, N>& arr, const int multiplier ) {
mulArrayImpl( contig_range<int>(arr), multiplier );
}
(পরীক্ষিত নয়, তবে ডিজাইনের কাজ করা উচিত)।
তারপরে, আপনার .cppফাইলে:
void mulArrayImpl(contig_range<int> rng, const int multiplier) {
for(auto& e : rng) {
e *= multiplier;
}
}
এটির এমন নেতিবাচক দিক রয়েছে যা অ্যারের সামগ্রীর উপরে লুপ করে যে কোডটি জানে না (সংকলন করার সময়) অ্যারেটি কত বড়, যা অপ্টিমাইজেশন ব্যয় করতে পারে। এটির সুবিধাটি রয়েছে যে বাস্তবায়নটি শিরোনামে থাকতে হবে না।
একটি পরিষ্কারভাবে নির্মাণের বিষয়ে সতর্কতা অবলম্বন করুন contig_range, যদি আপনি এটি পাস করেন তবে setএটি ধরে নেওয়া হবে যে setডেটাটি সংলগ্ন, যা মিথ্যা, এবং সমস্ত জায়গায় অপরিজ্ঞাত আচরণ করে do মাত্র দুটি stdপাত্রে যে এই কাজের জন্য নিশ্চিত করা হয় হয় vectorএবং array(এবং C-শৈলী অ্যারে যখনই যা ঘটে তখনই!)। dequeএলোমেলো অ্যাক্সেস থাকা সত্ত্বেও এটি সংশ্লেষযোগ্য নয় (বিপজ্জনকভাবে, এটি ছোট অংশগুলিতে মজাদার!), listএমনকি খুব কাছাকাছিও নয়, এবং সহযোগী (অর্ডারযুক্ত এবং অর্ডারযুক্ত) পাত্রেও সমানভাবে স্বতন্ত্র নয়।
তাই তিন কনস্ট্রাকটর আমি কোথায় বাস্তবায়িত std::array, std::vectorএবং C-শৈলী অ্যারে, যা মূলত ঘাঁটি জুড়ে।
বাস্তবায়নও []সহজ এবং এর মধ্যে for()এবং []এটি যা আপনি চান তার বেশিরভাগই arrayতাই না?
std::vector।