2011-03-11 5 views
4

동적으로 커질 2D 배열이 필요하기 때문에 2D 벡터를 사용하려고합니다. 클래스 선언에서 : 클래스의 동적 2D 벡터 선언

우리는이 시도

vector<vector<double> > table; 

그러나 테이블을 할당하지 않는 것 같습니다. 우리가 회원들에게 접근하려고 시도 할 때 우리는 세그 폴트를 얻습니다.

클래스 선언 :

vector<vector<double> >* table; 

생성자 :

그래서 우리는이 시도

 table = new vector<vector<double> >; 

을하지만 지금 우리는 우리가 전에 액세스 방식 (와 [] []) 아무튼 일하지 마라.

우리는 이것에 더미 클래스 시도 :

class myClass { 
    public: 
    myClass(); 
    ~myClass(); 
    vector<vector<double> > t; 
}; 

myClass::myClass() 
{ 
    t = vector<vector<double> > (10, vector<double>(10)); 
} 

를하지만 제대로 무료 않을 것 우리는 코어 덤프를 얻었다. 또한 우리가 어레이를 성장 시키려고했을 때, 우리는 각 새로운 행을 expclitly 건설했을 것입니다.

예 :

t[50] = vector<double>(5); 
t[50][10] = 10; 

우리가 이런 식으로하지 않은 경우, 우리는 segfault의 당신은 당신이 액세스 요소 전에 테이블의 크기를 조정해야합니다

답변

4

을 얻을 것입니다.

vector<vector<double> > table; 
table.resize(10); 
for (int i = 0; i < 10; ++i) 
    table[i].resize(20); 
3

벡터가 요소를 저장할만큼 충분히 큰지 확인하십시오. t 벡터의 크기가 N 인 경우 액세스 할 수있는 마지막 요소는 t[N-1]입니다.

t = vector<vector<double> > (10, vector<double>(10)); 
t[50] = vector<double>(5); // This is wrong! Vector size is 10, you access 50th. 
t[50][10] = 10; // Wrong again! Vector size 5, you access 10th.