C++中二維向量的扁平化
假設我們有一個二維向量,我們需要設計和實現一個迭代器來展平該二維向量。方法如下:
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]
為了解決這個問題,我們將遵循以下步驟:
定義一個二維陣列v
定義初始化器,它將接收一個二維陣列v,
rowPointer := 0
colPointer := 0
n := v的大小
當 (rowPointer < n 且 colPointer >= v[rowPointer]的大小) 時,執行:
(將rowPointer加1)
定義函式next()
x := v[rowPointer, colPointer]
(將colPointer加1)
如果colPointer等於v[rowPointer]的大小,則:
colPointer := 0
(將rowPointer加1)
當 (rowPointer < n 且 colPointer >= v[rowPointer]的大小) 時,執行:
(將rowPointer加1)
返回x
定義函式hasNext()
當rowPointer等於n時返回false
示例
讓我們看看下面的實現,以便更好地理解:
#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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP