मान लीजिए कि हमारे पास एक 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