2011-04-26 15 views

答えて

1

はい。

std::vector<int*> vints; 
vints.push_back(new int[10]); 
vints.push_back(new int[20]); 
vints.push_back(new int[3]); 

は、しかし、問題がある:ベクトルは、各動的に割り当てられた配列の大きさを思い出すことができません。

したがって良好としてstd:mapを使用する:このマップのキーは、対応する動的割り当てられた配列のサイズを指示

std::map<int, int*> arrayMap; 
arrayMap[10] = new int[10]; 
arrayMap[20] = new int[20]; 
arrayMap[3] = new int[3]; 

はまだ良くはまだです:としてベクトルのベクトル:

std::vector<vector<int> > vecArray; 

私は、以前のもののために行くために強い理由、動的に割り当てられた配列のすなわちコンテナをしていない限り、私は、最後のアプローチを好むだろう。

+0

配列のサイズを覚えておく必要はありません。ありがとう! – pighead10

+0

@Pig Head:どのように関連付けるのですか? Betteは 'std :: map'を使用します! – Nawaz

+0

@ Nawazそして、同じサイズの複数の配列がある場合はどうなりますか?この場合、プログラムでメモリリークが発生します。 –

2

はい、可能ですが、なぜvector<vector<int>>を使用しないのですか?より柔軟で問題の少ない

アレイを使用することをお勧めする場合、Boostshared_arrayは、アレイメモリの管理における手作業を減らすのに役立ちます。

+0

'scoped_array'はstd :: vectorに入ることができません。 –

+0

@Andy - ありがとう、それを知らなかった –

+0

私は配列よりも柔軟性が必要ない、私がやっていることはとても簡単です。 – pighead10

1

可能です。これを試して。

vector<int*> vec; 
vec.push_back(test1); 
vec.push_back(test2); 
vec.push_back(test3); 

編集: はあなたのベクトルがスコープの外に出る前にメモリを解放することを忘れないでください。

for(int i = 0; i < vec.size(); i++){ 
    delete [] vec[i]; 
} 
+1

メモリを手動で解放することが推奨されます。そうしないと、 'vec'が有効範囲外になったときにメモリがリークします。 –

+0

@Steve Townsend - あなたの権利。 –

+0

これは 'operator delete []'を使うべきです。これが私が 'ベクトル'を好む理由です... –

2

はい、可能です。しかし、あなたが必要なものを以来することは、それを簡単に、簡単です:& myArrayVectorを使用し、*

std::vector <std::vector<int> > myArrayVector(numberOfArrays); 
myArrayVector[0].resize(10); 
myArrayVector[1].resize(20); 
myArrayVector[2].resize(3); 

あなたはint型を持っている必要がどこ[I] [0]、私は、配列のインデックスです。

関連する問題