কম্পিউটার টিউটোরিয়াল

C++-এ বাইডিরেকশনাল ইটেরেটর (Bidirectional Iterators)

এখানে আমরা C++-এ বাইডিরেকশনাল ইটেরেটর (Bidirectional Iterators) কনসেপ্ট দেখব।

  • বাইডিরেকশনাল ইটেরেটর ফরওয়ার্ড ইটেরেটরের সব ফিচার সাপোর্ট করে, এবং প্রিফিক্স ও পোস্টফিক্স ডিক্রিমেন্ট অপারেটরও সাপোর্ট করে।
  • এই টাইপের ইটেরেটর দুদিকেই এলিমেন্ট অ্যাক্সেস করতে পারে: এন্ড (end) দিকে এবং বיגিনিং (beginning) দিকে।
  • র‍্যান্ডম এক্সেস ইটেরেটর (Random access iterator)ও বাইডিরেকশনাল ইটেরেটর的一種।
  • বাইডিরেকশনাল ইটেরেটর ফরওয়ার্ড ইটেরেটরের ফিচার থাকে, শুধু পার্থক্য হলো এটি ডিক্রিমেন্টও করা যায়।

বাইডিরেকশনাল ইটেরেটর의 কিছু প্রপার্টি রয়েছে। নিচে সেগুলো দেওয়া হলো:

প্রপার্টি (Property) এক্সপ্রেশন (Expression)
বাইডিরেকশনাল ইটেরেটর ডিফল্ট-কনস্ট্রাক্টিবল, কপি-অ্যাসাইনেবল, এবং ডেস্ট্রাক্টিবল 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
  1. C++-এ বাইনারি সার্চ ট্রি ইটারেটর (Binary Search Tree Iterator)

  2. C++-এ আউটপুট ইটেরেটর (Output Iterators)

  3. C++-এ ইটেরেটর ইনভ্যালিডেশন (Iterator Invalidation)

  4. C#-এ ইটেরেটর (Iterators)