在 C++ 中展平 2D 向量

c++server side programmingprogramming更新于 2025/4/10 2:22:17

假设我们有一个 2D 向量,我们必须设计和实现一个迭代器来展平该 2d 向量。将有不同的方法如下 −

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

要解决此问题,我们将遵循以下步骤 −

  • 定义一个 2D 数组 v

  • 定义初始化程序,这将需要一个 2D 数组 v,

  • rowPointer := 0

  • colPointer := 0

  • n := size of v

  • while (rowPointer < n and colPointer >= size of v[rowPointer]), do −

    • (将 rowPointer 增加 1)

  • 定义一个函数 next()

  • x := v[rowPointer, colPointer]

  • (将 colPointer 增加 1)

  • 如果 colPointer 与 v[rowPointer] 的大小相同,则 −

    • colPointer := 0

    • (将 rowPointer 增加 1)

    • 当 (rowPointer < n and colPointer >= v[rowPointer] 的大小) 时,执行 −

      • (将 rowPointer 增加 1)

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

相关文章