例如,是否可以使用这些数组的std :: vector?
int *test1 = new int[10];
int *test2 = new int[20];
int *test3 = new int[3];
答案 0 :(得分:2)
是的,这是可能的,但为什么不使用vector<vector<int>>
?更灵活,更省事。
如果您坚持使用数组,Boost中的shared_array
可能有助于减少管理阵列内存的手动工作。
答案 1 :(得分:2)
是的,有可能。但是,因为你需要的很简单,所以要简单:
std::vector <std::vector<int> > myArrayVector(numberOfArrays);
myArrayVector[0].resize(10);
myArrayVector[1].resize(20);
myArrayVector[2].resize(3);
无论你需要一个int *,请使用&amp; myArrayVector [i] [0],其中i是数组索引。
答案 2 :(得分: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];
}
答案 3 :(得分: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;
我更喜欢最后一种方法,除非我有充分的理由去寻找早期的方法,即动态分配数组的容器。