2011-04-26 75 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 2011-04-26 14:23:21

+0

@Pig Head:你如何联系他们?那么Bette会使用'std :: map'! – Nawaz 2011-04-26 14:26:32

+0

@Nawaz如果有几个相同大小的数组呢?这种情况下,你的程序中会有内存泄漏。 – 2011-04-26 14:29:19

2

是的,这是可能的,但为什么不只是使用vector<vector<int>>?更灵活,更少麻烦。

如果你坚持使用数组,shared_arrayBoost可能有助于减少管理阵列内存的手动工作。

+0

'scoped_array'不能进入std :: vector,唉。 – 2011-04-26 14:20:55

+0

@安迪 - 感谢,不知道 – 2011-04-26 14:22:34

+0

我并不需要比数组更多的灵活性,我所做的非常简单。 – pighead10 2011-04-26 14:22:36

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'超出范围时会泄漏。 – 2011-04-26 14:21:56

+0

@Steve Townsend - 你的权利。 – 2011-04-26 14:29:36

+0

应该使用'operator delete []'。这就是为什么我更喜欢'vector' ... – 2011-04-26 14:34:40

2

是的,这是可能的。但是,因为你需要的是简单,使简单:

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

无论你需要有一个int *,使用& myArrayVector [I] [0],其中i是数组索引。

相关问题