2016-11-16 1 views
0

테트리스 모양의 입력을 허용하는 프로그램을 작성하고 있습니다. 그때 그 2-D 벡터의 각을 가리다차원 벡터에 대한 포인터 벡터의 요소에 액세스

110 | 1 | 111 
011 | 1 | 010 
     | 1 | 111 
// Where a 0 denotes "empty space" 

와 벡터라는 형태로 그 포인터를 저장 : 그들은 다음과 같이거야 그래서 나는 논리 값의 2-D 벡터에서 이러한 모양을 저장합니다. 내 문제는 개별 0과 1을 (다른 모양과 비교하기 위해) 액세스하는 데 달려 있습니다. 주어진 예

:

vector<vector<bool> > Shape; 
vector<Shape *> shapes; 

여기서 형상 I는 이전에 준 2-D 벡터 가리 세 요소를 가지고, I는 상기 (1)에 액세스 할 수있게하려면 (0, 1)의 총수 첫 번째 모양. 많은 다른 것들 사이

shapes[index]->at(0).at(1); 
shapes[index]->at(0)[1]; 
shapes[index][0][1]; 

을이 중에 내가 원하는 걸주는 것으로 보이지 않는다 :

은 내가 시도했습니다. 나는 여전히 포인터에 대해 새롭기 때문에 나는 뻔뻔스럽게 명백한 것을 놓치지 않기를 바란다.

미리 감사드립니다.

요청에 따라 여기 내 코드가 더 큰 덩어리입니다. 이에

#include <iostream> 
#include <cstdio> 
#include <string> 
#include <vector> 
#include <sstream> 
using namespace std; 

typedef vector<vector<bool> > Shape; 

class ShapeShifter { 
public: 
    ShapeShifter(int argc, char **argv); 
    void Apply(int index, int row, int col); 
    bool FindSolution(int index); 
    void AddShape(Shape *newShape); 
    void AddMove(int index, int row, int col); 
    void PrintMoves(); 
    void PrintGrid(); 
protected: 
    vector<vector<bool> > grid; 
    vector<Shape *> shapes; 
    vector<string> moves; 
}; 

void ShapeShifter::Apply(int index, int row, int col) { 
    int i, j, k; 
    int y = 0, z = 0; 

    if((row + shapes[index]->size() > grid.size()) || (col + shapes[index]->at(0).size() > grid[0].size())) { 
     return; // shape won't fit 
    } 

    for(i = row; i < (row + shapes[index]->size()); i++) { 
     for(j = col; j < (col + shapes[index]->at(0).size()); j++) { 
      if(shapes[index]->at(y)[z] == 1) { 
       if(grid[i][j] == 0) { 
        grid[i][j] = 1; 
       } 
       else { 
        grid[i][j] = 0; 
       } 

      } 
      z++; 
     } 
     z = 0; 
     y++; 
    } 
    return; 
} 

나는 bools의 그리드를하고 난 모양이 그리드의 해당 요소에서 부울이 뒤집어 될 일이있는 경우 지정된 인덱스에 모양으로 마스크하기 위해 노력하고있어 .

형상 벡터는 그래서 같은 표준 입력 라인으로 채워집니다 : 당신은 왜 string의 벡터를 사용하는

ShapeShifter sshift(argc, argv); 
Shape *newShape; 
vector<bool> shapeLine; 
int i, j; 
string line; 

while(getline(cin, line)) { 
    j = 0; 
    newShape = new Shape; 
    for(i = 0; i < line.size(); i++) { 
     if(line[i] == ' ') { 
      j++; 
     } 
     else { 
      shapeLine.push_back(line[i] - '0'); 
     } 
    } 
    newShape->push_back(shapeLine); 
    sshift.AddShape(newShape); 
    line.clear(); 
} 

void ShapeShifter::AddShape(Shape *newShape) { 
    shapes.push_back(newShape); 
} 
+0

내가 무엇을 의미 want'을? 너는 무엇을 기대하고 있니? 너는 무엇을 얻 느냐? –

+2

게시 비트 및 코드 조각은 도움이되지 않습니다. [mcve]를 게시하십시오. –

+0

마지막에 게시 한 세 가지 표현식을 평가할 때 어떤 값을 얻고 있습니까? –

답변

0

와 문자의 단지 2 차원 배열 또는 당신은 무엇을해야합니까? 그렇다면 쉽게 액세스 할 수 있습니다 : shape[x][y]. 어쨌든

, 당신은 당신이 당신이 이런 식으로 원하는 값에 액세스 할 수 있습니다 설정 한 방법 : `나에게주는 무엇 shapes[0]->at(0).at(1);

+0

'shapes [0]'이 포인터로 평가되므로 이것은 작동하지 않습니다. '벡터 '에 액세스하려면 역 참조를해야합니다. –

+0

Woo, 그는'Shape *'을 사용하고'->' –

+0

으로 변경해야합니다. 틀린 typedef를 실수로 포함 시켰습니다. 실제로는 >이 아니고 벡터 이 아닙니다. –

관련 문제