2012-03-20 2 views
0

나는 STL을 놀래키다가, "나는 2 차원 어레이를 만들 것"이라고 생각했다. 좋아, 여기까지잘못된 값을 가진 2 차원 벡터

vector< vector<int> > vetor; 

vetor.resize(10); 
vetor[0].resize(10); 

for(int i = 0; i < vetor.capacity(); i++){ 
    for(int h = 0; h < vetor[0].capacity();h++){ 
     vetor[i][h] = h; 
    } 

} 

:하지만이 코딩 어떤 ...

. 내가 배열 값이 용도를 표시하려고 할 때 :

for(int i = 0; i < vetor.capacity(); i++){ 
    cout << "LINE " << i << ": "; 
    for(int h = 0; h < vetor[0].capacity();h++){ 
     cout << vetor[i][h] <<" "; 
    } 
    cout << "\n"; 
} 

을 그리고 그 결과는 정말 잘못 내 프로그램에 무슨 일

LINE 0: 4 5 6 7 8 9 6 7 8 9 
LINE 1: 0 1 2 3 0 1 2 3 0 1 
LINE 2: 0 1 2 3 0 1 2 3 0 1 
LINE 3: 0 1 2 3 0 1 2 3 0 1 
LINE 4: 0 1 2 3 0 1 2 3 0 1 
LINE 5: 0 1 2 3 0 1 2 3 0 1 
LINE 6: 0 1 2 3 0 1 2 3 0 1 
LINE 7: 0 1 2 3 0 1 2 3 0 1 
LINE 8: 0 1 2 3 0 1 2 3 4 5 
LINE 9: 0 1 2 3 4 5 6 7 8 9 

? 올바른 값을 인쇄하지 않습니다!

답변

3

몇 가지 문제 :

첫 번째 벡터의 크기 만 조정할 수 있습니다. 모두 크기를 조정해야합니다.

대신이 사용을 고려 :이 벡터의 10 × 10 벡터를 생성합니다

vector< vector<int> > vetor (10, vector<int>(10, 0)); 

.

벡터는 값 default_value의 크기 요소로 벡터를 구성하는 생성자 (size_t size, T default_value)를 가지고 있습니다.

컴파일 타임에 벡터의 크기를 알 수 있고 변경하지 않을 경우 약간의 성능 향상을 위해 대신 std :: array를 사용할 수 있습니다.

번째 벡터의 크기 (용량은 보조 저장 장치를 지칭하며, 주로 최적화 제외 무시 될 수있다)

for(int i = 0; i < vetor.size(); i++){ 
    for(int h = 0; h < vetor[0].size(); h++){ 
     vetor[i][h] = h; 
    } 
} 

를 결정하는 벡터 :: 크기()하지 벡터 :: 용량()을 사용하여 vetor [0] .resize (10)의 크기를 조정하면 첫 번째 요소의 크기 만 조정됩니다.

vetor[0].resize(10) 
vetor[1].resize(10) 
vetor[2].resize(10) 
. 
. 
vetor[10].resize(10) 

은 당신이 원하는 것을 할 :에

당신은해야합니다.

. (이것은 매트릭스 클래스 잠재적으로 다른 크기 아니다있다 벡터의 벡터에서 다른 방법으로 각 벡터 넣어).이 외에도

+0

, 그는 (크기 '를 카운트 할 필요)'하지 'capacity()'는이 경우에도 동일 할 것입니다. –

+0

이상 :'std :: array <10, std :: array <10, int>>' –

+0

그러나 vetor.resize (x) 및 vetor [0] .resize (y)의 크기를 조정할 때 수행중인 작업은 무엇입니까? 어디에서 볼 수 있습니까? –