たとえば、これらの配列のstd :: vectorを持つことは可能ですか?動的に割り当てられた配列のstd :: vectorを作成する方法はありますか?
int *test1 = new int[10];
int *test2 = new int[20];
int *test3 = new int[3];
たとえば、これらの配列のstd :: vectorを持つことは可能ですか?動的に割り当てられた配列のstd :: vectorを作成する方法はありますか?
int *test1 = new int[10];
int *test2 = new int[20];
int *test3 = new int[3];
はい。
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;
私は、以前のもののために行くために強い理由、動的に割り当てられた配列のすなわちコンテナをしていない限り、私は、最後のアプローチを好むだろう。
可能です。これを試して。
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];
}
メモリを手動で解放することが推奨されます。そうしないと、 'vec'が有効範囲外になったときにメモリがリークします。 –
@Steve Townsend - あなたの権利。 –
これは 'operator delete []'を使うべきです。これが私が 'ベクトル'を好む理由です... –
はい、可能です。しかし、あなたが必要なものを以来することは、それを簡単に、簡単です:& myArrayVectorを使用し、*
std::vector <std::vector<int> > myArrayVector(numberOfArrays);
myArrayVector[0].resize(10);
myArrayVector[1].resize(20);
myArrayVector[2].resize(3);
あなたはint型を持っている必要がどこ[I] [0]、私は、配列のインデックスです。
配列のサイズを覚えておく必要はありません。ありがとう! – pighead10
@Pig Head:どのように関連付けるのですか? Betteは 'std :: map'を使用します! – Nawaz
@ Nawazそして、同じサイズの複数の配列がある場合はどうなりますか?この場合、プログラムでメモリリークが発生します。 –