Computer >> Máy Tính >  >> Lập trình >> C ++

Làm phẳng vector 2D trong C ++

Giả sử chúng ta có một vectơ 2D, chúng ta phải thiết kế và triển khai một trình vòng lặp để làm phẳng vectơ 2d đó. Sẽ có các phương pháp khác nhau như sau -

  • next () - Điều này sẽ trả về phần tử tiếp theo của phần tử hiện tại

  • hasNext () - Điều này sẽ kiểm tra xem phần tử tiếp theo có hiện diện hay không

Vì vậy, nếu đầu vào là [[1,2], [3], [4]] thì nếu chúng ta gọi các hàm như sau -

  • iterator.next ();

  • iterator.next ();

  • iterator.next ();

  • iterator.hasNext ();

  • iterator.hasNext ();

  • iterator.next ();

  • iterator.hasNext ();

thì đầu ra sẽ là [1,2,3, true, true, 4, false]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một mảng 2D v

  • Xác định bộ khởi tạo, điều này sẽ sử dụng một mảng 2D v,

  • rowPointer:=0

  • colPointer:=0

  • n:=kích thước của v

  • while (rowPointer =size of v [rowPointer]), do -

    • (tăng rowPointer lên 1)

  • Xác định một hàm next ()

  • x:=v [rowPointer, colPointer]

  • (tăng colPointer lên 1)

  • nếu colPointer giống với kích thước của v [rowPointer], thì -

    • colPointer:=0

    • (tăng rowPointer lên 1)

    • while (rowPointer =size of v [rowPointer]), do -

      • (tăng rowPointer lên 1)

  • trả lại x

  • Xác định một hàm hasNext ()

  • trả về false khi rowPointer giống với n

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơ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());
}

Đầu vào

ob.next()
ob.next()
ob.next()
ob.hasNext()
ob.next()
ob.hasNext()

Đầu ra

1
2
3
1
4
0