Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำให้เวกเตอร์ 2D แบนใน C++


สมมติว่าเรามีเวกเตอร์ 2 มิติ เราต้องออกแบบและใช้ตัววนซ้ำเพื่อทำให้เวกเตอร์ 2 มิตินั้นแบน โดยจะมีวิธีการต่างๆ ดังนี้ -

  • 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]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดอาร์เรย์ 2 มิติ v

  • กำหนด initializer นี้จะใช้อาร์เรย์ 2D v หนึ่งตัว

  • rowPointer :=0

  • colPointer :=0

  • n :=ขนาดของวี

  • ในขณะที่ (rowPointer =ขนาดของ v[rowPointer]) ทำ -

    • (เพิ่ม rowPointer ขึ้น 1)

  • กำหนดฟังก์ชัน next()

  • x :=v[rowPointer, colPointer]

  • (เพิ่ม colPointer ขึ้น 1)

  • ถ้า colPointer เท่ากับขนาดของ v[rowPointer] ดังนั้น −

    • colPointer :=0

    • (เพิ่ม rowPointer ขึ้น 1)

    • ในขณะที่ (rowPointer =ขนาดของ v[rowPointer]) ทำ -

      • (เพิ่ม 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