यहां हम C++ में बाइडायरेक्शनल इटरेटर्स की अवधारणा देखेंगे।
- बाइडायरेक्शनल इटरेटर्स फॉरवर्ड इटरेटर्स की सभी सुविधाओं का समर्थन करते हैं, और प्रीफिक्स और पोस्टफिक्स डिक्रीमेंट ऑपरेटर्स भी।
- इस प्रकार का इटरेटर दोनों दिशाओं में एलिमेंट्स को एक्सेस कर सकता है, जैसे अंत की ओर और शुरुआत की ओर।
- रैंडम एक्सेस इटरेटर भी बाइडायरेक्शनल इटरेटर का एक प्रकार है।
- बाइडायरेक्शनल इटरेटर्स में फॉरवर्ड इटरेटर की विशेषताएं होती हैं, लेकिन एकमात्र अंतर यह है कि यह इटरेटर डिक्रीमेंट भी हो सकता है।
बाइडायरेक्शनल इटरेटर्स के कुछ गुण हैं। ये नीचे दिए गए हैं।
| गुण | एक्सप्रेशन |
|---|---|
| बाइडायरेक्शनल इटरेटर डिफॉल्ट-कंस्ट्रक्टिबल, कॉपी-असाइनेबल, और डिस्ट्रक्टिबल भी है | A p A q(p) q = p |
| इनकी तुलना इक्वलिटी और इनइक्वलिटी ऑपरेटर्स का उपयोग करके की जा सकती है | p == q p != q |
| इसे डी-रेफरेंस किया जा सकता है। वैल्यू प्राप्त करने के लिए डी-रेफरेंस ऑपरेटर (*) का उपयोग कर सकते हैं | *p |
| म्यूटेबल इटरेटर को lvalue के रूप में डी-रेफरेंस किया जा सकता है | *p = t |
| इंक्रीमेंट ऑपरेटर (++) और डिक्रीमेंट ऑपरेटर (--) का उपयोग करके इंक्रीमेंट या डिक्रीमेंट कर सकते हैं | p++ q-- |
उदाहरण कोड
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main() {
vector<int> vec{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
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 << " ";
return 0;
}
आउटपुट
10 20 30 40 50 60 70 80 90 100 100 90 80 70 60 50 40 30 20 10