मान लीजिए कि हमारे पास एक 2D वेक्टर है, हमें उस 2d वेक्टर को समतल करने के लिए एक इटरेटर को डिज़ाइन और कार्यान्वित करना होगा। अलग-अलग तरीके इस प्रकार होंगे -
-
अगला () - यह वर्तमान तत्व का अगला तत्व लौटाएगा
-
hasNext() - यह जांच करेगा कि अगला तत्व मौजूद है या नहीं
इसलिए, यदि इनपुट [[1,2],[3],[4]] जैसा है, तो यदि हम फंक्शन्स को इस प्रकार कहते हैं -
-
iterator.next ();
-
iterator.next ();
-
iterator.next ();
-
iterator.hasNext ();
-
iterator.hasNext ();
-
iterator.next ();
-
iterator.hasNext ();
तो आउटपुट [1,2,3,सत्य, सत्य,4,झूठा]
. होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक 2डी सरणी को परिभाषित करें v
-
प्रारंभकर्ता को परिभाषित करें यह एक 2D सरणी v लेगा,
-
पंक्ति सूचक :=0
-
colPointer :=0
-
n:=वी का आकार
-
जबकि (rowPointer
=size of v[rowPointer]), करते हैं - -
(पंक्ति सूचक को 1 से बढ़ाएं)
-
-
अगला फ़ंक्शन परिभाषित करें ()
-
x :=v[rowPointer, colPointer]
-
(colPointer को 1 से बढ़ाएं)
-
यदि colPointer v[rowPointer] के आकार के समान है, तो -
-
colPointer :=0
-
(पंक्ति सूचक को 1 से बढ़ाएं)
-
जबकि (rowPointer
=size of v[rowPointer]), करते हैं - -
(पंक्ति सूचक को 1 से बढ़ाएं)
-
-
-
वापसी x
-
फ़ंक्शन को परिभाषित करें hasNext()
-
जब पंक्ति सूचक 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