एक पुनरावर्तक एक पॉइंटर की तरह एक वस्तु है जिसका उपयोग कंटेनर के तत्वों पर पुनरावृति करने के लिए किया जाता है। एक पुनरावर्तक का उपयोग करने का मुख्य लाभ एक सामान्य इंटरफ़ेस बनाना और एल्गोरिदम को इसे लागू करने के लिए उपयोग किए जाने वाले कंटेनर के प्रकार से प्रतिरक्षा बनाना है।
C++ मानक पुस्तकालय में पुनरावृत्तियों के प्रकार होते हैं -
- फॉरवर्ड इटरेटर
- द्विदिशात्मक पुनरावर्तक
- इनपुट इटरेटर
- आउटपुट इटरेटर
- रैंडम एक्सेस इटरेटर
कार्यक्रम यह जांचना है कि डेटा संरचना द्वारा उपरोक्त में से कौन से इटरेटर का उपयोग किया जाता है।
उपयोग किए गए पुनरावर्तक के प्रकार को निर्धारित करने के लिए कुछ कारक उपयोगी हो सकते हैं।
-
टाइपिड , रनटाइम पर प्रकार की पहचान की जानकारी देता है।
-
पुनरावर्तक लक्षण , उन गुणों को परिभाषित करता है जो इटरेटर के पास हैं।
-
पुनरावर्तक श्रेणी उस श्रेणी को परिभाषित करने के लिए उपयोग किया जाता है जिससे वे इटरेटर को परिभाषित करते हैं।
उदाहरण
#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