2014-12-22 1 views
-3

여기 내 질문이 있습니다. 클래스 개체에서 파생 된 일부 개체를 넣으려고하는 multidimework 배열이 있습니다.오브젝트 *** p에 포인터 벡터를 가질 수 있습니까?

Block ***arrTerrain; 

제 ''는 라인이며, 두 번째 ''는 Collumns는 용이고 포인터 (위치 안에 반대하는 제이다 :이 multidimessional 배열은 다음과 같은 방법을 선언 FreeTerrain이라는 객체라고 가정 해 봅시다).

this->arrTerrain = new Block**[a]; 

for(int i=0;i < a ;i++){ 
    arrTerrain[i] = new Block*[l]; 
} 

for(int i=0;i<a;i++) 
    for(int j=0;j<l;j++) 
     arrTerrain[i][j] = new FreeTerrain; 

나는 (클래스 군인 블록 aswell에서 파생) 지정된 위치에있는 군인을 했어야 해요 :

나는 이런 식으로 초기화합니다. 만약 내가 같은 위치에 2 병사를 넣고 싶다면, 나는 첫 번째 포인터를 잃어 버린다. (obviusly). 그래서 각 위치에 Blocks 또는 somesort 벡터가 있다고 생각했지만 구현하기가 어렵습니다.

누구든지 나를 도와 줄 수 있습니까?

미리 감사드립니다.

+4

축하합니다! 당신은 3 성급 프로그래머입니다! – rightfold

+0

당신은 매저 키스트입니까? 그렇다면 AMA를 할 수 있습니까? – Shoe

+0

벡터 사용을 제안하는 경우 처음부터이 다차원 배열을 나타내는 벡터를 사용하지 않는 이유는 무엇입니까? 그런 다음 다시 ** 별 4 개짜리 ** 프로그래머가 될 수 있고'Block ****'을 할 수 있습니다.하지만 그건 어리석은 짓입니다. –

답변

2

응답이 그렇습니다. 거의 (거의) 벡터를 만들 수 있습니다.

이제 내재적 인 질문은 "내가 객체의 벡터를 만들어야합니다"***이며 대답은 nooooooo입니다.

먼저 포인터를 사용해야 할 때만 포인터를 사용해야합니다. FreeTerrain의 배열이 모두 같은 클래스 인 경우 을 사용하지 않으므로 배열을 FreeTerrain으로 만듭니다.

그리고 벡터에 배열을 두어서는 안됩니다. 단지 문제를 묻는 것입니다.

전체적으로 std::vector<std::vector<FreeTerrain>>을 사용해야합니다.

편집 : 아래의 설명에서, 당신이 정말로 (다형성 참조를 가지고, 말) 포인터를 사용하여 고유의 포인터를 사용해야하는 경우 :

std::vector<std::vector<std::unique_ptr<FreeTerrain>>> v; 
+0

나는 당신이 말하고자하는 것을 보지만 내 문제는 : 나는 2D 배열을 가져야한다. 그리고 만약 내가 단지 벡터를 만들면 나는 단지 다형성을 날려 버린다. 왜냐하면 나는 군인이나 성을 가질 필요가 있기 때문입니다. FreeTerrain은 빈 공간을 표현한 것입니다. 답변 해 주셔서 감사합니다 :) –

+1

@DiogoNunes ['unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) 또는 ['shared_ptr'] (http : /en.cppreference.com/w/cpp/memory/shared_ptr). 이러한 다형성 객체의 2D 배열은'std :: vector >>'이 될 수 있습니다. ['std :: make_unique'] (http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)로 할당 할 수 있습니다. 공유 포인터를 사용하면 ['std :: make_shared'] (http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared)가됩니다. –

+0

시간 내 주셔서 감사합니다. 매우 도움이되었습니다. 건배. 그리고 모하마드도! –

관련 문제