假设我们有
std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);
第一维度可以使用 resize()
进行调整大小。然而,我还想为 face 的元素保留内存(第二维度),也就是说,我想使用 reserve()
方法。(我知道 resize()
和 reserve()
之间的区别)
假设我们有
std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);
第一维度可以使用 resize()
进行调整大小。然而,我还想为 face 的元素保留内存(第二维度),也就是说,我想使用 reserve()
方法。(我知道 resize()
和 reserve()
之间的区别)
只需做
face.resize(nElm);
for(auto &i : face) i.resize(nDim2);
face.resize(nElm);
for(std::vector < std::vector < unsigned short int> >::iterator it
=face.begin();it!=face.end();++it) {
it->resize(dim2);
}
for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);
由于两个闭合的尖括号之间没有空格,我假设您正在使用c++11
。
另一方面,如果您想要保留内存,您必须在实际拥有向量即第一个维度上的元素时执行此操作。
face.resize(nElm);
我实际上有了一个向量,是吗?看起来我应该为每个第一维度保留一个。这就像其他答案中提到的那样。 - Shibli你需要遍历第一维并调整第二维的大小,可以使用迭代器或简单的方法实现;
for (int i=0; i<nElm; i++) {
face[i].resize(nElm2ndDimension);
}