পয়েন্টার বাড়ানো আইডোমেটিক সি ++, কারণ পয়েন্টার শব্দার্থবিজ্ঞানগুলি সি ++ স্ট্যান্ডার্ড লাইব্রেরির পিছনে নকশা দর্শনের একটি মৌলিক দিক প্রতিফলিত করে (আলেকজান্ডার স্টেপানভের এসটিএল ভিত্তিক )
এখানে গুরুত্বপূর্ণ ধারণাটি হ'ল এসটিএলটি ধারক, অ্যালগরিদম এবং পুনরুক্তিগুলির চারপাশে নকশা করা হয়েছে। পয়েন্টারগুলি কেবল পুনরাবৃত্ত হয় ।
অবশ্যই পয়েন্টারগুলিকে ইনক্রিমেন্ট করার ক্ষমতা (বা যোগ / বিয়োগ) থেকে আবার সিতে ফিরে যায় সি সি স্ট্রিং ম্যানিপুলেশন অ্যালগরিদমগুলি কেবল পয়েন্টার গাণিতিক ব্যবহার করে লেখা যায়। নিম্নলিখিত কোড বিবেচনা করুন:
char string1[4] = "abc";
char string2[4];
char* src = string1;
char* dest = string2;
while ((*dest++ = *src++));
এই কোডটি নাল-টার্মিনেটেড সি-স্ট্রিং অনুলিপি করতে পয়েন্টার গাণিতিক ব্যবহার করে। শূন্যতার মুখোমুখি হয়ে লুপটি স্বয়ংক্রিয়ভাবে শেষ হয়।
সি ++ দিয়ে পয়েন্টার শব্দার্থকগুলি পুনরাবৃত্তকারীদের ধারণায় সাধারণীকরণ করা হয় । বেশিরভাগ স্ট্যান্ডার্ড সি ++ পাত্রে পুনরাবৃত্তি সরবরাহ করা হয়, যা সদস্য begin
এবং end
ফাংশনগুলির মাধ্যমে অ্যাক্সেস করা যায় । ইট্রেটাররা পয়েন্টারের মতো আচরণ করে, যাতে তারা বর্ধিত, অবনমিত হতে পারে এবং কখনও কখনও হ্রাস বা উন্নত হতে পারে।
একটি উপর পুনরাবৃত্তি করতে std::string
, আমরা বলব:
std::string s = "abcdef";
std::string::iterator it = s.begin();
for (; it != s.end(); ++it) std::cout << *it;
আমরা পুনরাবৃত্তিকে বৃদ্ধি করি ঠিক যেমন আমরা একটি সরল সি-স্ট্রিংয়ে একটি পয়েন্টার বৃদ্ধি করি। এই ধারণাটি শক্তিশালী হওয়ার কারণ হ'ল আপনি ফাংশনগুলি লিখতে টেমপ্লেটগুলি ব্যবহার করতে পারেন যা প্রয়োজনীয় ধারণার প্রয়োজনীয়তা পূরণ করে এমন কোনও ধরণের পুনরাবৃত্তির জন্য কাজ করবে । এবং এটি এসটিএল এর শক্তি:
std::string s1 = "abcdef";
std::vector<char> buf;
std::copy(s1.begin(), s1.end(), std::back_inserter(buf));
এই কোডটি একটি ভেক্টরটিতে একটি স্ট্রিং অনুলিপি করে। copy
ফাংশন যা সঙ্গে কাজ করবে একটি টেমপ্লেট কোনো (যা প্লেইন পয়েন্টার অন্তর্ভুক্ত) পুনরুক্তিকারীর যে সমর্থন বৃদ্ধিশীল। আমরা copy
প্লেইন সি-স্ট্রিংয়ে একই ফাংশনটি ব্যবহার করতে পারি :
const char* s1 = "abcdef";
std::vector<char> buf;
std::copy(s1, s1 + std::strlen(s1), std::back_inserter(buf));
আমরা copy
কোনও std::map
বা কোনও std::set
বা কোনও কাস্টম ধারক যা পুনরাবৃত্তিকে সমর্থন করে তা ব্যবহার করতে পারি ।
নোট করুন যে পয়েন্টারগুলি একটি নির্দিষ্ট ধরণের পুনরাবৃত্তিকারী: এলোমেলো অ্যাক্সেস পুনরুদ্ধারকারী , যার অর্থ তারা বৃদ্ধি এবং হ্রাস, +
এবং -
অপারেটরের সাথে অগ্রগতি সমর্থন করে । অন্যান্য পুনরাবৃত্তকারী প্রকারগুলি কেবল পয়েন্টার শব্দার্থবিজ্ঞানের একটি উপসেটকে সমর্থন করে: একটি দ্বিদ্বিদী পুনরুক্তি কমপক্ষে বৃদ্ধি এবং হ্রাসকে সমর্থন করে; একটি ফরোয়ার্ড ইটারেটর কমপক্ষে ইনক্রিমেন্টিং সমর্থন করে। (সমস্ত পুনরাবৃত্তকারী ধরণগুলি ডেরেফারিং সমর্থন করে)) copy
ফাংশনটির জন্য একটি পুনরুক্তি প্রয়োজন যা কমপক্ষে ইনক্রিমেন্টিং সমর্থন করে।
আপনি এখানে বিভিন্ন পুনরাবৃত্তি ধারণা সম্পর্কে পড়তে পারেন ।
সুতরাং, ইনক্রিমেন্টিং পয়েন্টারগুলি হ'ল সি-অ্যারেতে পুনরাবৃত্তি করার একটি আইডিয়োমেটিক সি ++ উপায়, বা সি-অ্যারেতে উপাদান / অফসেট অ্যাক্সেস করা।