এটি করা যেতে পারে তবে পরিষ্কারভাবে কয়েক ধাপ নিতে হবে। প্রথমে এমন একটি লিখুন 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
।