2012-05-08 4 views
0

2 차원 배열 : 할당 Cell **scoreTable 후론 :C++의 2D 객체 배열? 같은

scoreTable = new Ceil*[10]; 
for(int i = 0 ;i<10;i++) 
scoreTable[i] = new Ceil[9]; 

그리고이 같은 값을 저장하려면 :. scoreTable[i][j]= new Ceil(i,j) 힙,이 도움을 C++로 감사 작동하지 않을 수 있습니다.

+1

대신 중첩 된'std :: vector > '을 사용 해본 적이 있습니까? – moooeeeep

+0

읽기 http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16 –

답변

0

, Cell의 2D 배열이므로 값을 변경하는 데 new 키워드를 사용할 필요가 없습니다.

당신이 당신의 Cell 클래스를 SetValue(i,j) 같은 방법을주는 경우에, 당신은 다음과 같이 사용할 수 있습니다 : scoreTable[i][j].SetValue(i,j);

+0

나는 너무 많이 생각했다. 고맙다. 그냥 새로운 방법을 추가한다. 좋다. – sinjon87

1

scoreTable[i][j]= new Ceil(i,j). 셀에 Cell*을 넣으려고합니다.

당신은 포인터의 2 차원 배열을 만들 수 있습니다

auto scoreTable = new Ceil**[10]; 
for(int i = 0 ;i<10;i++) 
    scoreTable[i] = new Ceil*[9]; 

을하지만 훨씬 더 나은 vector 사용하는 것입니다 : 당신이 이미 가지고있는 것이 같은 배열을 할당하면

std::vector< std::vector<Ceil*> > table; 
table.resize(10); 
for (int i = 0; i < 10; ++i) 
{ 
    table[i].resize(9, NULL); 
} 
table[3][4] = new Ceil(); 
+0

나는 이것을 알고 있지만, C++로 자바를 변환 할 때이 질문이 나타나기 때문에 많은 변화가 있어야한다. , scoreTable은 클래스 멤버입니다. 감사합니다. – sinjon87

+0

'vector'는 operator []'를 오버로드하므로 배열처럼 작동합니다. – MSalters

0

내가 대신 std::vector를 사용하는 것이 좋습니다 싶습니다. 추적하는 것이 훨씬 쉽습니다.

당신은이 vector<Cell> 10 개 원소 함유 각 셀 (9)을 포함하는 벡터이다 scoreTable를 생성한다

std::vector< std::vector< Cell> > scoreTable(10, std::vector<Cell>(9)); 

하여 상기 모든 코드를 대체 할 수있다. 즉, 원하는 2D 테이블.

같은 방법으로 요소에 액세스합니다. 내가 9 프론 0 가고,

새 행으로 확장합니다 8. ​​0에서 J scoreTable[i][j]는 단지 말 : 새 열 들어

scoreTable.push_bach(std::vector<Cell>(9)); 

:

for(size_t row = 0; row < scoreTable.size(); ++row) { 
    scoreTable[row].push_back(Cell()); 
} 

new 또는 delete은 필요 없습니다.

+0

예, 시도해 보는 것이 좋습니다. 감사합니다. – sinjon87