Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ reserve()内存多维std::vector(C+;+;)_C++_Memory Management_Multidimensional Array_Stdvector - Fatal编程技术网

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;i
resize()
reserve()
不是一回事。你在问这两个问题中的哪一个?问题的措辞有点含糊不清。请接受你以前问题的一些答案。有很多好的答案可供选择。使用
face.resize(nElm)
我实际上有一个向量,是吗?似乎我应该像其他答案中提到的那样,为每个第一维度逐个保留。是的,这正是上面的循环所做的。(只是比公认答案中的一个更有效:)