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