C++11-এ আগত range-based for loop কন্টেইনারের সব উপাদান ওয়াকפים থেকে শেষ পর্যন্ত ইটারেট করার সহজ সিনট্যাক্স।
সিনট্যাক্স
for (range-declaration : range-expression) loop-statement
- range-declaration: উপাদানের টাইপের ভ্যারিয়েবল (প্রায়
autoব্যবহার হয়)। - range-expression: কোনো সিকোয়েন্স (অ্যারে, ভেক্টর, ম্যাপ, ব্রেস-ইনিশিয়ালাইজার ইত্যাদি)।
- loop-statement: লুপ বডি।
ট্রেডিশনাল ফর লুপের সাথে তুলনা
// রেঞ্জ-বেজড
int arr[] = {10,20,30,40,50};
for (int num : arr) cout << num << ", ";
// ট্রেডিশনাল
for (int i=0; i<5; i++) cout << arr[i] << ", ";
সুবিধা
- সহজ সিনট্যাক্স, সাইজ/ইন্ডেক্স দরকার নেই।
autoদিয়ে টাইপ অটো-ডিটেক্ট।- কন্ডিশন বা ইনক্রিমেন্ট লিখতে হয় না।
সীমাবদ্ধতা
- স্পেসিফিক ইন্ডেক্স অ্যাক্সেস বা স্কিপ করা যায় না।
- রিভার্স ইটারেশন সরাসরি সমর্থিত নয় (Boost লাইব্রেরি লাগে)।
উদাহরণ
#include <iostream>
#include <vector>
#include <map>
int main() {
int arr[] = {10,20,30,40,50};
for (int i=0; i<5; i++) printf("%d, ", arr[i]); printf("\n");
for (int num : arr) printf("%d, ", num); printf("\n");
char str[] = "Hello World";
for (char c : str) printf("%c ", c); printf("\n");
for (char c : "Hello World") printf("%c ", c); printf("\n");
map<int, char> MAP({{1,'A'},{2,'B'},{3,'C'}});
for (auto m : MAP) printf("{ %d, %c }", m.first, m.second);
return 0;
}
আউটপুট:
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 }