使用reserve()函数为多维std::vector(C++)预留内存

5

假设我们有

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

第一维度可以使用 resize() 进行调整大小。然而,我还想为 face 的元素保留内存(第二维度),也就是说,我想使用 reserve() 方法。(我知道 resize()reserve() 之间的区别)


3
“resize()”和“reserve()”不是同一件事情。你在问哪一个?问题措辞有些含糊不清。 - NPE
请去接受一些您以前提出的问题的答案。有很多好答案可供选择。 - Lightness Races in Orbit
3个回答

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);
}

如果你只想保留第二个维度,那么就直接这样做,而不是使用resize。

2
如果您想要调整大小,那么您需要:
for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);

由于两个闭合的尖括号之间没有空格,我假设您正在使用c++11

另一方面,如果您想要保留内存,您必须在实际拥有向量即第一个维度上的元素时执行此操作。


通过 face.resize(nElm); 我实际上有了一个向量,是吗?看起来我应该为每个第一维度保留一个。这就像其他答案中提到的那样。 - Shibli
是的,那正是上面的循环所做的。 - Michael Krelin - hacker
(比接受答案中的更高效一点:) - Michael Krelin - hacker

1

你需要遍历第一维并调整第二维的大小,可以使用迭代器或简单的方法实现;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接