2014-01-12 3 views
0

누군가이 코드가 작동하지 않는 이유를 설명 할 수 있습니다. 어떻게 해결할 수 있습니까? 는알 수없는 크기의 다차원 배열을 선언하면

int main() 
    { 
    int gridSize; 
    cout<<"please enter the grid size: "; 
    cin>>gridSize; 
    int gridArray[gridSize][gridSize]; 
    } 
+1

C++에는 [std :: vector'] (http://en.cppreference.com/w/cpp/container/vector)가 있습니다. 그걸 써. –

+0

C++에 VLA가 포함되어 있지 않으므로 작동하지 않습니다. 이를 해결하기 위해, 2D 주소 지정을 지원하기 위해 작은 래퍼와 함께'std :: vector'를 사용하십시오. http://stackoverflow.com/a/12009991/179910 –

+0

https://groups.google.com/forum/#!topic/comp.std.c++/K_4lgA1JYeg – Maroun

답변

3

를 사용 std::vector<int>(rows * cols) 또는 std::vector<std::vector<int>>() 감사합니다. C++은 VLA를 지원하지 않기 때문에 작동하지 않습니다. 다음 기술 사양에서 std::dynarray을 사용할 수 있습니다.

+0

ok 고마워. :) – Alladin

0
class Table 
{ 
public: 
    Table(int rows, int cols) 
    { 
     tab_.resize(rows); 
     for (auto& row : tab_) 
     { 
      row.resize(cols); 
     } 
    } 

    vector<int>& operator[](int row) { return tab_[row]; } 
private: 
    vector<vector<int> > tab_; 
}; 
+0

내가 테이블이 필요하면 그렇게했을 것이므로 투표가 왜 내려 왔는지 이해하고 싶다. – Ezra

+0

1) OP는 테이블이나 클래스를 요구하지 않았지만 간단히 동적 크기의 다차원 배열을 요구하지 않았습니다. 이것은 IMO에 대한 자세한 해답입니다 .2) 정규 사용 사례에서는이 경우에 대한 추가 클래스를 작성하지 않습니다 if 그 핵심 기능 (예 : 데이터베이스 lib에 대한),하지만 내 구현 (이 측면을 숨 깁니다)에 직접 벡터에 작동합니다 .3) 나는 내가 템플릿으로 그것을 설계 할 것이라고 같은 클래스를 작성, 그것을 지원하는 임의의 차원의 숫자와 propably 하나의 벡터 또는 바이트 버퍼와 함께 구현합니다. 여기에 요점은 간단하게 1)입니다 : 너무 상세하지만 동시에 너무 상세하지만 동시에 일반 너무 – Paranaix

2

std::vector가 그런 일을 할 수있는 선호하는 방법이지만, 수동 어떻게 그것을 알고에만 관심이있는 경우 :

int main() 
{ 
    int gridSize; 
    std::cout << "Enter size of grid: "; 
    std::cin >> gridSize; 
    int** gridArray = new int*[gridSize]; 
    for (int i = 0; i < gridSize; i++) 
    { 
     std::cout << std::endl << i << std::endl; 
     gridArray[i] = new int[gridSize]; 
    } 
} 

을 기본적으로, 당신이 포인터 포인터의 배열을 사용하고, 그런 다음 2 차원을 설정합니다. 그러나 이와 같이하면 누출을 피하기 위해 메모리를 수동으로 delete해야합니다. 는 다시,이 방법은 새로운/중간 C++ 프로그래머를위한 훌륭한 자원이 노하우

Parashift's C++ FAQ 목적으로 제공, 제안되지 않는다.

+0

당신의 도움을 많이하고, 내게주는 등 유용한 정보 – Alladin

관련 문제