একটি ইটারেটর হলো একটি অবজেক্ট যা পয়েন্টারের মতো কাজ করে এবং একটি কন্টেইনারের এলিমেন্টগুলোতে ইটারেট করতে ব্যবহৃত হয়। ইটারেটর ব্যবহারের মূল সুবিধা হলো একটি কমন ইন্টারফেস তৈরি করা এবং কন্টেইনারের টাইপ থেকে অ্যালগরিদমকে ইমিউন রাখা।
C++ স্ট্যান্ডার্ড লাইব্রেরিতে ইটারেটরর টাইপগুলো হলো −
- ফরওয়ার্ড ইটারেটর
- বাইডিরেকশনাল ইটারেটর
- ইনপুট ইটারেটর
- আউটপুট ইটারেটর
- র্যান্ডম এক্সেস ইটারেটর
প্রোগ্রামটি চেক করে যে ডেটা স্ট্রাকচারটি কোন ইটারেটর ব্যবহার করছে।
ইটারেটর টাইপ নির্ধারণে সহায়ক কিছু ফ্যাক্টর রয়েছে।
typeid, রানটাইমে টাইপ আইডেন্টিফিকেশন ইনফরমেশন রিটার্ন করে।
ইটারেটর ট্রেইটস, ইটারেটর যেসব প্রোপার্টি ধারণ করে সেগুলো ডিফাইন করে।
ইটারেটর ক্যাটাগরি ব্যবহার করে ডিফাইন করা হয় যে ইটারেটরটি কোন ক্যাটাগরির অন্তর্গত।
উদাহরণ
#include <bits/stdc++.h> using namespace std; template <class T> string iteratortype(T iterator){ if (typeid(typename iterator_traits<T>::iterator_category) == typeid(input_iterator_tag)) return "Input"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(output_iterator_tag)) return "Output"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(forward_iterator_tag)) return "Forward"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(bidirectional_iterator_tag)) return "Bidirectional"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(random_access_iterator_tag)) return "Random_Access"; return "Missing"; } int main(){ vector<int> vec; auto iter = vec.begin(); cout <<iteratortype(iter) << " Iterator\n"; return 0; }
আউটপুট
Random_Access Iterator