কম্পিউটার

C++ এ 2D ভেক্টর সমতল করুন


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

  1. C++ এ একটি ভেক্টর বাছাই করা

  2. C++ এ কনস্ট্রাক্টরের কাছে একটি ভেক্টর পাস করা

  3. ভেক্টর::রিসাইজ() বনাম ভেক্টর::রিজার্ভ() C++ এ

  4. C++ এ ইনফারেন্স টাইপ করুন