有没有办法创建动态分配数组的std :: vector?

时间:2011-04-26 14:15:17

标签: c++ arrays dynamic vector allocation

例如,是否可以使用这些数组的std :: vector?

int *test1 = new int[10];
int *test2 = new int[20];
int *test3 = new int[3];

4 个答案:

答案 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;

我更喜欢最后一种方法,除非我有充分的理由去寻找早期的方法,即动态分配数组的容器。