2012-03-20 4 views
0

私はSTLを勉強しています。 [OK]を、ここまで2dベクトル値が間違っています

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

いくつかの問題:

最初のベクターのサイズ変更のみです。それらのすべてをサイズ変更する必要があります。

代わりにこれを使用することを検討してください:

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

これはベクトルの10×10のベクトルを作成します。

vectorには、値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)のサイズを変更するときに何をしていますか? ここで私は目に見える例を見ることができますか? –

関連する問題