สมมติว่าเรามีเวกเตอร์ 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