例如,是否有可能具有这些数组的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'超出范围时会泄漏。 – 2011-04-26 14:21:56
@Steve Townsend - 你的权利。 – 2011-04-26 14:29:36
应该使用'operator delete []'。这就是为什么我更喜欢'vector' ... – 2011-04-26 14:34:40
是的,这是可能的。但是,因为你需要的是简单,使简单:
std::vector <std::vector<int> > myArrayVector(numberOfArrays);
myArrayVector[0].resize(10);
myArrayVector[1].resize(20);
myArrayVector[2].resize(3);
无论你需要有一个int *,使用& myArrayVector [I] [0],其中i是数组索引。
我不需要记住数组的大小,我已经存储在别处。谢谢! – pighead10 2011-04-26 14:23:21
@Pig Head:你如何联系他们?那么Bette会使用'std :: map'! – Nawaz 2011-04-26 14:26:32
@Nawaz如果有几个相同大小的数组呢?这种情况下,你的程序中会有内存泄漏。 – 2011-04-26 14:29:19