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

C++ में बाइडायरेक्शनल इटरेटर्स


बाइडायरेक्शनल इटरेटर्स क्या हैं?

वे इटरेटर्स जो रेंज के तत्वों के क्रम को दोनों दिशाओं से एक्सेस करने का अधिकार रखते हैं - अंत से और शुरुआत से - बाइडायरेक्शनल इटरेटर्स कहलाते हैं। इटरेटर्स लिस्ट, मैप और सेट जैसे डेटा प्रकारों पर काम कर सकते हैं।

बाइडायरेक्शनल इटरेटर्स में फॉरवर्ड इटरेटर्स के समान गुण होते हैं, केवल अंतर यह है कि उन्हें डिक्रीमेंट भी किया जा सकता है।

बाइडायरेक्शनल इटरेटर्स के गुण

गुण मान्य एक्सप्रेशन्स
डिफ़ॉल्ट-कंस्ट्रक्टिबल, कॉपी-कंस्ट्रक्टिबल, कॉपी-असाइनेबल और डिस्ट्रक्टिबल X a;
X b(a);
b = a;
समानता/असमानता ऑपरेटर्स का उपयोग करके तुलना की जा सकती है a == b
a != b
rvalue के रूप में डीरेफरेंस किया जा सकता है *a
a->m
म्यूटेबल इटरेटर्स के लिए: lvalue के रूप में डीरेफरेंस किया जा सकता है *a = t
इनक्रीमेंट किया जा सकता है ++a
a++
*a++
डिक्रीमेंट किया जा सकता है --a
a--
*a--
Lvalues स्वैपेबल हैं swap(a,b)

जहां X एक बाइडायरेक्शनल इटरेटर है, a और b इस इटरेटर प्रकार के ऑब्जेक्ट हैं, और t इटरेटर प्रकार द्वारा इंगित प्रकार का ऑब्जेक्ट है (या कोई अन्य प्रकार जिसे टाइप X के ऑब्जेक्ट को डीरेफरेंस करके लौटाए गए lvalue को असाइन किया जा सकता है)।

मुख्य विशेषताएं

  • बाइडायरेक्शनल इटरेटर्स फॉरवर्ड इटरेटर्स की सभी विशेषताओं का समर्थन करते हैं, और प्रीफिक्स और पोस्टफिक्स डिक्रीमेंट ऑपरेटर्स भी
  • इस प्रकार का इटरेटर दोनों दिशाओं में तत्वों को एक्सेस कर सकता है - अंत की ओर और शुरुआत की ओर
  • रैंडम एक्सेस इटरेटर भी एक प्रकार का बाइडायरेक्शनल इटरेटर है
  • बाइडायरेक्शनल इटरेटर्स में फॉरवर्ड इटरेटर की विशेषताएं होती हैं, लेकिन एकमात्र अंतर यह है कि यह इटरेटर डिक्रीमेंट भी हो सकता है

उदाहरण

#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;

    cout << "Forward: ";
    for(it = vec.begin(); it != vec.end(); it++)
        cout << *it << " ";
    cout << endl;

    cout << "Reverse: ";
    for(rev_it = vec.rbegin(); rev_it != vec.rend(); rev_it++)
        cout << *rev_it << " ";
    cout << endl;

    return 0;
}

आउटपुट

Forward: 1 2 3 4 5 6 7 8 9 10
Reverse: 10 9 8 7 6 5 4 3 2 1

कौन से कंटेनर्स बाइडायरेक्शनल इटरेटर्स का समर्थन करते हैं?

  • std::list
  • std::set / std::multiset
  • std::map / std::multimap
  • std::vector (रैंडम एक्सेस इटरेटर भी प्रदान करता है)
  • std::deque (रैंडम एक्सेस इटरेटर भी प्रदान करता है)

नोट: std::forward_list केवल फॉरवर्ड इटरेटर प्रदान करता है, बाइडायरेक्शनल नहीं।

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

    मान लीजिए हम बाइनरी ट्री के लिए एक इटरेटर बनाना चाहते हैं। दो मेथड होंगे। अगला एलिमेंट लौटाने के लिए next() मेथड, और बूलियन मान लौटाने के लिए hasNext() मेथड, जो इंगित करेगा कि अगला एलिमेंट मौजूद है या नहीं। तो यदि ट्री इस तरह है −और फंक्शन कॉल्स का अनुक्रम [next(), next(), hasNext(), next(), h

  1. - C++ में इटरेटर इनवैलिडेशन

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

  1. - C# में इटरेटर्स

    इटरेटर कलेक्शन पर कस्टम इटरेशन करता है। यह yield return स्टेटमेंट का उपयोग करता है और प्रत्येक एलिमेंट को एक समय में लौटाता है। इटरेटर वर्तमान स्थान को याद रखता है और अगले इटरेशन में अगला एलिमेंट लौटाया जाता है।निम्न एक उदाहरण है:उदाहरणusing System; using System.Collections.Generic; using System.Lin