লুপের জন্য ভিত্তিক পরিসীমা C++ 11 স্ট্যান্ডার্ডে যোগ করা হয়েছে এবং এটি তার ঐতিহ্যগত সমতুল্যের আরও কমপ্যাক্ট ফর্ম। লুপের জন্য ভিত্তিক পরিসরটি শুরু থেকে শেষ পর্যন্ত একটি পাত্রের উপাদানগুলির উপর পুনরাবৃত্তি করতে ব্যবহৃত হয়। লুপের জন্য পরিসীমা-ভিত্তিক সিনট্যাক্স নিম্নরূপ -
সিনট্যাক্স
for( range-declaration : range-expression ) loop statement
পরিসীমা-ঘোষণা - এটি পরিসর-প্রকাশের উপাদানগুলির প্রকারের মতো একই ধরণের পরিবর্তনশীলের ঘোষণা। প্রায়শই স্বয়ংক্রিয় শব্দটি স্বয়ংক্রিয়ভাবে পরিসর-এক্সপ্রেশনের উপাদানগুলির ধরন সনাক্ত করতে ব্যবহৃত হয়।
রেঞ্জ-এক্সপ্রেশন - উপাদানগুলির একটি ক্রম প্রতিনিধিত্ব করতে ব্যবহৃত যেকোন অভিব্যক্তি। এছাড়াও ধনুর্বন্ধনীতে উপাদানগুলির ক্রম ব্যবহার করা যেতে পারে।
লুপ-স্টেটমেন্ট − লুপের বডি যাতে এক বা একাধিক স্টেটমেন্ট থাকে যা রেঞ্জ-এক্সপ্রেশনের শেষ না হওয়া পর্যন্ত বারবার চালানো হবে।
ঐতিহ্যগত লুপের জন্য সাথে তুলনা করুন −
// Iterating over array int arr[] = { 10,20,30,40,50 }; for (int num : arr) printf("%d, ",num); Is same as: for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]);
এখানে কেউ সহজেই দেখতে পারে যে লুপের জন্য রেঞ্জভিত্তিক অ্যারের আকার গণনা করার দরকার নেই তাই শর্তসাপেক্ষ এক্সপ্রেশনের প্রয়োজন নেই। এছাড়াও, বৃদ্ধি বা হ্রাস অপারেশনের কোন প্রয়োজন নেই। প্রতিটি পুনরাবৃত্তির জন্য উপরের লুপের জন্য পরিসরের সংখ্যাটি শুরু থেকে শুরু পর্যন্ত অ্যারে অ্যার[] থেকে উপাদানের মান নেয়। একটি জাম্প স্টেটমেন্ট কার্যকর না হওয়া পর্যন্ত কোনো উপাদান বাদ দেওয়া হয় না।
ব্রেক − বাকি সমস্ত পুনরাবৃত্তির জন্য লুপ বন্ধ করে দেয়।
চালিয়ে যান - বর্তমান পুনরাবৃত্তি এড়িয়ে যায় এবং পরবর্তীতে চলে যায়
যাও − −
লেবেল অনুসরণ করে বিবৃতিতে লুপ থেকে বেরিয়ে যায়এর জন্য পরিসীমা-ভিত্তিক সুবিধাগুলি
-
ব্যবহার করা সহজ এবং সহজ সিনট্যাক্স।
-
কনটেইনারে উপাদানের সংখ্যা বা পরিসর-প্রকাশের আকার গণনা করার দরকার নেই।
-
যদি পরিসীমা-ঘোষণার ডেটা টাইপ জানা না থাকে তবে স্বয়ংক্রিয় স্পেসিফায়ার তার জায়গায় ব্যবহার করা যেতে পারে, যা স্বয়ংক্রিয়ভাবে এটিকে রেঞ্জ-এক্সপ্রেশনের প্রকারের সাথে সামঞ্জস্যপূর্ণ করে তোলে।
-
কোন শর্তসাপেক্ষ বিবৃতি বা বৃদ্ধি/হ্রাস বিবৃতির প্রয়োজন নেই৷
-
যেখানে পুরো কন্টেইনারটি একবারে পুনরাবৃত্তি করা হয় সেক্ষেত্রে সর্বোত্তম।
এর জন্য পরিসীমা-ভিত্তিক অসুবিধাগুলি
-
begin() এবং end() এর মধ্যে প্রতিটি উপাদানের উপর পুনরাবৃত্তি করে। নির্দিষ্ট সূচকের চিকিৎসা করা যায় না।
-
লুপের জন্য রেঞ্জ-ভিত্তিক ব্যবহার করে এক বা একাধিক উপাদানের পুনর্বিবেচনা করা এবং উপাদানগুলির একটি গ্রুপ এড়িয়ে যাওয়া যাবে না৷
-
অ্যারে বিপরীত ক্রমে পুনরাবৃত্তি করা যাবে না. এর জন্য
লাইব্রেরি ব্যবহার করা হয়
উদাহরণ
#include <iostream> #include <vector> #include <map> int main(){ int arr[] = { 10,20,30,40,50 }; // traditional for for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]); printf("\n"); for (int num : arr) printf("%d, ",num); printf("\n"); // for character array char str[] = "Hello World"; for (char c : str) printf("%c ",c); printf("\n"); for (char c : "Hello World") printf("%c ",c); printf("\n"); std::map <int, char> MAP({{1, 'A'}, {2, 'B'}, {3, 'C'}}); for (auto m : MAP) printf("{ %d, %c }", m.first,m.second); }
আউটপুট
10, 20, 30, 40, 50, 10, 20, 30, 40, 50, H e l l o W o r l d H e l l o W o r l d { 1, A }{ 2, B }{ 3, C }