एक इटरेटर एक पॉइंटर की तरह एक ऑब्जेक्ट है जिसका उपयोग कंटेनर के तत्वों पर पुनरावृति करने के लिए किया जाता है। इटरेटर का उपयोग करने का मुख्य लाभ एक सामान्य इंटरफेस बनाना और एल्गोरिदम को कंटेनर के प्रकार से प्रतिरक्षित बनाना है जिसका उपयोग इसे लागू करने के लिए किया जाता है।
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