2012-01-29 30 views
5

让我们有储备()内存多维的std ::向量(C++)

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

其确定为resize()的第一个维度。不过,我也想为reserve()的内存元素面对;我的意思是第二维。 (我知道resize()reserve()之间的差异)

+3

'resize()'和'reserve()'不是一回事。你问两个问题中的哪一个?这个问题的措辞有点模棱两可。 – NPE 2012-01-29 19:34:06

+0

太好了。所以...做到这一点! – 2012-01-29 19:42:58

+0

请接受您之前问题的一些答案。有很多好的选择。 – 2012-01-29 19:44:08

回答

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

2

如果你想调整大小它,那么你需要

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

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

另一方面,如果你想保留内存,你必须做到这一点,当你有一个向量,即 - 第一维的元素。

+0

用'face.resize(nElm);'我实际上有一个向量,是吗?看来我应该为其他答案中提到的每个第一维都逐个保留。 – Shibli 2012-01-29 19:45:06

+0

是的,这正是上面的循环所做的。 – 2012-01-29 19:56:13

+0

(只比接受的答案更有效率:))) – 2012-01-29 19:56:46

1

您必须循环第一个维度并调整第二个维度的大小,可以使用迭代器或简单的;

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