এখানে আমরা 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