reserve()内存多维std :: vector(C ++)

时间:2012-01-29 19:32:04

标签: c++ memory-management multidimensional-array stdvector

我们有

std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);

第一维可以resize()。但是,我也希望reserve()记忆面部元素;我的意思是第二个维度。 (我知道resize()reserve()

之间的区别

3 个答案:

答案 0 :(得分:4)

只做

face.resize(nElm);
for(auto &i : face) i.resize(nDim2);

或者如果你不使用c ++ 11:

face.resize(nElm);
for(std::vector < std::vector < unsigned short int> >::iterator it
                =face.begin();it!=face.end();++it) {
   it->resize(dim2);
}

如果您只想reserve获得第二维,那么就这样做而不是resize

答案 1 :(得分:2)

如果你想调整,那么你需要

for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);

(因为两个结束尖括号之间没有空格,我假设你正在使用c++11)。

另一方面,如果你想保留内存,你必须在实际拥有一个向量时这样做,即 - 第一维上的一个元素。

答案 2 :(得分:1)

你必须遍历第一个维度并使用迭代器或简单的方法调整第二个维度;

for (int i=0; i<nElm; i++) {
    face[i].resize(nElm2ndDimension);
}