std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);
其确定为resize()
的第一个维度。不过,我也想为reserve()
的内存元素面对;我的意思是第二维。 (我知道resize()
和reserve()
之间的差异)
std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);
其确定为resize()
的第一个维度。不过,我也想为reserve()
的内存元素面对;我的意思是第二维。 (我知道resize()
和reserve()
之间的差异)
只是做
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
如果你想调整大小它,那么你需要
for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);
(因为有两个封闭尖括号之间没有空格,我假设你正在使用c++11
)。
另一方面,如果你想保留内存,你必须做到这一点,当你有一个向量,即 - 第一维的元素。
用'face.resize(nElm);'我实际上有一个向量,是吗?看来我应该为其他答案中提到的每个第一维都逐个保留。 – Shibli 2012-01-29 19:45:06
是的,这正是上面的循环所做的。 – 2012-01-29 19:56:13
(只比接受的答案更有效率:))) – 2012-01-29 19:56:46
您必须循环第一个维度并调整第二个维度的大小,可以使用迭代器或简单的;
for (int i=0; i<nElm; i++) {
face[i].resize(nElm2ndDimension);
}
'resize()'和'reserve()'不是一回事。你问两个问题中的哪一个?这个问题的措辞有点模棱两可。 – NPE 2012-01-29 19:34:06
太好了。所以...做到这一点! – 2012-01-29 19:42:58
请接受您之前问题的一些答案。有很多好的选择。 – 2012-01-29 19:44:08