Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ द्विदिश इटरेटर्स

वे इटरेटर जिन्हें किसी श्रेणी के तत्वों के अनुक्रम को अंत से और शुरुआत दोनों दिशाओं से एक्सेस करने का विशेषाधिकार प्राप्त है, उन्हें द्विदिशात्मक पुनरावर्तक के रूप में जाना जाता है। . पुनरावर्तक सूची मानचित्र और सेट जैसे डेटा प्रकारों पर काम कर सकते हैं।

द्विदिशात्मक पुनरावर्तक पुनरावृत्तियों को अग्रेषित करना . के समान गुण हैं , केवल इस अंतर के साथ कि उन्हें घटाया भी जा सकता है -

<टीडी>एक्स ए;
एक्स बी (ए);
बी =ए;
<टीडी>ए ==बी
ए! =बी
<टीडी>*ए
ए-> एम
संपत्ति वैध भाव
डिफ़ॉल्ट-रचनात्मक है,
प्रतिलिपि बनाने योग्य,
कॉपी-असाइन करने योग्य और विनाशकारी
समानता/असमानता ऑपरेटरों का उपयोग करके तुल्यता के लिए तुलना की जा सकती है (सार्थक जब दोनों इटरेटर मान एक ही अंतर्निहित अनुक्रम पर पुनरावृति करते हैं)।
एक प्रतिद्वंद्विता के रूप में संदर्भित किया जा सकता है (यदि एक 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

  1. C++ में बाइनरी सर्च ट्री इटरेटर

    मान लीजिए हम बाइनरी ट्री के लिए एक इटरेटर बनाना चाहते हैं। दो तरीके होंगे। अगला () विधि अगले तत्व को वापस करने के लिए है, और hasNext () विधि बूलियन मान वापस करने के लिए है, जो इंगित करेगा कि अगला तत्व मौजूद है या नहीं। तो अगर पेड़ जैसा है - और फ़ंक्शन कॉल का क्रम [अगला (), अगला (), है नेक्स्ट (),

  1. सी ++ में इटरेटर अमान्यता

    सी ++ में, हमारे पास वेक्टर, सूची, सेट, मानचित्र इत्यादि जैसे विभिन्न कंटेनर हैं। इन कंटेनरों के माध्यम से पुनरावृत्त करने के लिए, हम इटरेटर्स का उपयोग कर सकते हैं। जब हम C++ में इटरेटर का उपयोग कर रहे हों तो हमें सावधान रहना चाहिए। जब ​​हम किसी कंटेनर पर पुनरावृत्ति का उपयोग कर रहे हैं, तो कभी-कभी,

  1. सी # में इटरेटर

    Iterator संग्रह पर एक कस्टम पुनरावृत्ति करता है। यह यील्ड रिटर्न स्टेटमेंट का उपयोग करता है और प्रत्येक तत्व को एक बार में लौटाता है। इटरेटर वर्तमान स्थान को याद रखता है और अगले पुनरावृत्ति में अगला तत्व वापस आ जाता है। निम्नलिखित एक उदाहरण है - उदाहरण using System; using System.Collections.Generic