वे इटरेटर जिन्हें किसी श्रेणी के तत्वों के अनुक्रम को अंत से और शुरुआत दोनों दिशाओं से एक्सेस करने का विशेषाधिकार प्राप्त है, उन्हें द्विदिशात्मक पुनरावर्तक के रूप में जाना जाता है। . पुनरावर्तक सूची मानचित्र और सेट जैसे डेटा प्रकारों पर काम कर सकते हैं।
द्विदिशात्मक पुनरावर्तक पुनरावृत्तियों को अग्रेषित करना . के समान गुण हैं , केवल इस अंतर के साथ कि उन्हें घटाया भी जा सकता है -
संपत्ति | वैध भाव |
---|---|
डिफ़ॉल्ट-रचनात्मक है, प्रतिलिपि बनाने योग्य, कॉपी-असाइन करने योग्य और विनाशकारी | <टीडी>एक्स ए; |
समानता/असमानता ऑपरेटरों का उपयोग करके तुल्यता के लिए तुलना की जा सकती है (सार्थक जब दोनों इटरेटर मान एक ही अंतर्निहित अनुक्रम पर पुनरावृति करते हैं)। | <टीडी>ए ==बी|
एक प्रतिद्वंद्विता के रूप में संदर्भित किया जा सकता है (यदि एक dereferenceable स्थिति में है)। | <टीडी>*ए|
परिवर्तनीय पुनरावृत्तियों (गैर-स्थिर पुनरावृत्तियों) के लिए:एक अंतराल के रूप में संदर्भित किया जा सकता है (यदि एक dereferenceable स्थिति में है)। | *a =t |
बढ़ाया जा सकता है (यदि एक dereferenceable स्थिति में)। परिणाम या तो dereferenceable या पिछले-अंत-अंत इटरेटर भी है। समान की तुलना करने वाले दो पुनरावर्तक, दोनों बढ़ाए जाने के बाद भी समान की तुलना करते रहते हैं। | ++a ए++ *ए++ |
घटाया जा सकता है (यदि एक dereferenceable iterator मान इससे पहले हो)। | --a ए-- *ए-- |
Lvalues स्वीकार्य हैं। | स्वैप(a,b) |
जहाँ X एक द्विदिशात्मक पुनरावर्तक है , ए और बी इस इटरेटर प्रकार की वस्तुएं हैं, और टी इटरेटर प्रकार द्वारा इंगित प्रकार की एक वस्तु है (या कुछ अन्य प्रकार जिसे lvalue को असाइन किया जा सकता है) X प्रकार के ऑब्जेक्ट को डीरेफ़रेंस करके लौटाया जाता है।
C++ में द्विदिश पुनरावृत्तियों की अवधारणा।
-
द्विदिश इटरेटर अग्रेषण इटरेटर की सभी सुविधाओं का समर्थन करते हैं, और उपसर्ग और पोस्टफिक्स डिक्रीमेंट ऑपरेटरों का भी समर्थन करते हैं।
-
इस प्रकार का इटरेटर तत्वों को दोनों दिशाओं में एक्सेस कर सकता है, जैसे अंत की ओर और शुरुआत की ओर।
-
रैंडम एक्सेस इटरेटर भी एक प्रकार का द्विदिश इटरेटर है।
-
द्विदिश पुनरावृत्तियों में पुनरावर्तक को अग्रेषित करने की विशेषताएं हैं, लेकिन अंतर केवल इतना है कि इस पुनरावर्तक को भी घटाया जा सकता है।
Input: 1 2 3 4 5 6 7 8 9 10 Output: 10 9 8 7 6 5 4 3 2 1
उदाहरण
#include <iostream> #include<iterator> #include<vector> using namespace std; int main() { vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector<int> ::iterator it; vector<int> :: reverse_iterator rev_it; for(it = vec.begin(); it != vec.end(); it++) cout<<*it<<" "; cout<< endl; for(rev_it = vec.rbegin(); rev_it!= vec.rend(); rev_it++) cout<<*rev_it<<" "; }
आउटपुट
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1