Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 2D 벡터 병합

<시간/>

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 :=v의 크기

  • 동안 (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

    와 같으면 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