ধরুন আমাদের একটি 2D ভেক্টর আছে, সেই 2d ভেক্টরকে সমতল করার জন্য আমাদের একটি ইটারেটর ডিজাইন এবং বাস্তবায়ন করতে হবে। নিচের মত বিভিন্ন পদ্ধতি থাকবে -
-
next() − এটি বর্তমান উপাদানের পরবর্তী উপাদানটি ফেরত দেবে
-
hasNext() − এটি পরবর্তী উপাদান উপস্থিত আছে কিনা তা পরীক্ষা করবে
সুতরাং, যদি ইনপুটটি [[1,2],[3],[4]] এর মত হয় তাহলে আমরা যদি ফাংশনগুলিকে নিম্নরূপ কল করি -
-
iterator.next();
-
iterator.next();
-
iterator.next();
-
iterator.hasNext();
-
iterator.hasNext();
-
iterator.next();
-
iterator.hasNext();
তাহলে আউটপুট হবে [1,2,3,true, true,4,false]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি 2D অ্যারে v
সংজ্ঞায়িত করুন -
আরম্ভকারী সংজ্ঞায়িত করুন এটি একটি 2D অ্যারে v,
নেবে -
rowPointer :=0
-
colPointer :=0
-
n :=v
এর আকার -
যখন (rowPointer
=v[rowPointer] এর আকার), − -
(রো পয়েন্টার 1 দ্বারা বাড়ান)
-
-
পরবর্তী ()
একটি ফাংশন সংজ্ঞায়িত করুন -
x :=v[rowPointer, colPointer]
-
(colPointer 1 দ্বারা বাড়ান)
-
যদি colPointer v[rowPointer] এর আকারের সমান হয়, তাহলে −
-
colPointer :=0
-
(রো পয়েন্টার 1 দ্বারা বাড়ান)
-
যখন (rowPointer
=v[rowPointer] এর আকার), − -
(রো পয়েন্টার 1 দ্বারা বাড়ান)
-
-
-
রিটার্ন x
-
hasNext()
একটি ফাংশন সংজ্ঞায়িত করুন -
rowPointer n
এর মত হলে মিথ্যা ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h>
using namespace std;
class Vector2D {
public:
int rowPointer, colPointer;
int n;
vector<vector<int< > v;
Vector2D(vector<vector<int< >& v){
this->v = v;
rowPointer = 0;
colPointer = 0;
n = v.size();
while (rowPointer < n && colPointer >= v[rowPointer].size()){
rowPointer++;
}
}
int next(){
//cout << rowPointer << " " << colPointer << endl;
int x = v[rowPointer][colPointer];
colPointer++;
if (colPointer == v[rowPointer].size()) {
colPointer = 0;
rowPointer++;
while (rowPointer < n && colPointer >= v[rowPointer].size()) {
rowPointer++;
}
}
return x;
}
bool hasNext(){
return !(rowPointer == n);
}
};
main(){
vector<vector<int<> v = {{1,2},{3},{4}};
Vector2D ob(v);
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext()) << endl;
cout << (ob.next()) << endl;
cout << (ob.hasNext());
} ইনপুট
ob.next() ob.next() ob.next() ob.hasNext() ob.next() ob.hasNext()
আউটপুট
1 2 3 1 4 0