2012-01-29 12 views
5

Diamo abbiamodi riserva() di memoria multi-dimensionale std :: vector (C++)

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

Il suo OK per resize() per la prima dimensione. Tuttavia, voglio anche la memoria reserve() per gli elementi del viso; Intendo per la seconda dimensione. (Sono consapevole della differenza tra resize() e reserve())

+3

'resize()' e 'reserve()' non sono la stessa cosa. Di quale dei due stai chiedendo? La formulazione della domanda è un po 'ambigua. – NPE

+0

Grande. Allora fallo! –

+0

Vai ad accettare alcune risposte alle tue precedenti domande, per favore. Ci sono molti buoni tra cui scegliere. –

risposta

4

Basta fare

face.resize(nElm); 
for(auto &i : face) i.resize(nDim2); 

o se non si utilizza C++ 11:

face.resize(nElm); 
for(std::vector < std::vector < unsigned short int> >::iterator it 
       =face.begin();it!=face.end();++it) { 
    it->resize(dim2); 
} 

Se si desidera solo per reserve la seconda dimensione invece di farlo invece di resize

2

Se si desidera ridimensionare esso, allora avete bisogno di

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

(dal momento che non c'è spazio tra due parentesi angolari di chiusura, ho pensato che si sta utilizzando c++11).

Se, al contrario, si desidera la memoria riserva, è necessario farlo quando si dispone effettivamente di un vettore, ovvero, un elemento nella prima dimensione.

+0

Con 'face.resize (nElm);' In realtà ho un vettore, vero? Sembra che dovrei prenotare uno per uno per ogni prima dimensione, come menzionato in altre risposte. – Shibli

+0

Sì, questo è esattamente ciò che fa il ciclo sopra. –

+0

(solo un po 'più efficiente di quello nella risposta accettata :)) –

1

È necessario eseguire il ciclo della prima dimensione e ridimensionare il secondo, utilizzando iteratori o un semplice;

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