ধরুন আমাদের একটি 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