C++ reserve()内存多维std::vector(C+;+;)
让我们开始吧C++ reserve()内存多维std::vector(C+;+;),c++,memory-management,multidimensional-array,stdvector,C++,Memory Management,Multidimensional Array,Stdvector,让我们开始吧 std::vector <std::vector <unsigned short int>> face; face.resize(nElm); std::向量面; 面。调整大小(nElm); 对于第一个维度,可以调整大小()。但是,我还想保留()面部元素的内存;我是说第二维度。(我知道resize()和reserve()之间的区别)就这样做吧 face.resize(nElm); for(auto &i : face) i.resize(nDim
std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);
std::向量面;
面。调整大小(nElm);
对于第一个维度,可以调整大小()。但是,我还想保留()
面部元素的内存;我是说第二维度。(我知道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);
}
face.resize(nElm);
对于(std::vector>::迭代器
=face.begin();it!=face.end();++it){
它->调整大小(dim2);
}
如果您只想为第二个维度保留空间,那么只需这样做而不是调整大小如果您想调整它的大小,那么您需要
for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);
(由于两个右尖括号之间没有空格,我假设您使用的是c++11
)
另一方面,如果你想保留内存,你必须在你有一个向量的时候这样做,那就是-第一维度上的一个元素
for (int i=0; i<nElm; i++) {
face[i].resize(nElm2ndDimension);
}
for(int i=0;iresize()
和reserve()
不是一回事。你在问这两个问题中的哪一个?问题的措辞有点含糊不清。请接受你以前问题的一些答案。有很多好的答案可供选择。使用face.resize(nElm)
我实际上有一个向量,是吗?似乎我应该像其他答案中提到的那样,为每个第一维度逐个保留。是的,这正是上面的循环所做的。(只是比公认答案中的一个更有效:)