память () многомерный std :: vector памяти - PullRequest
5 голосов
/ 29 января 2012

Давайте получим

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

В порядке до resize() для первого измеренияТем не менее, я также хочу reserve() памяти для элементов лица;Я имею в виду для второго измерения.(Я знаю разницу между resize() и reserve())

Ответы [ 3 ]

4 голосов
/ 29 января 2012

Просто сделайте

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

2 голосов
/ 29 января 2012

Если вы хотите изменить размер , то вам нужно

for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);

(поскольку между двумя закрывающими угловыми скобками нет пробела, я предположил, что вы используете c++11).

Если, с другой стороны, вы хотите зарезервировать память, вам придется делать это, когда у вас действительно есть вектор, то есть элемент в первом измерении.

1 голос
/ 29 января 2012

Вам придется перебрать первое измерение и изменить размер второго, используя итераторы или простое;

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