2013-04-08 17 views
7

La mia classe, GameBoard, ha una variabile membro che è un vettore 2D di un oggetto della classe Tile. Il costruttore GameBoard accetta larghezza e altezza come parametri.Come posso ridimensionare un vettore 2D di oggetti data la larghezza e l'altezza?

Come si può ridimensionare il vettore 2D degli oggetti Tile in base alla larghezza e all'altezza passate al costruttore? Come posso riempirlo con gli oggetti Tile in modo che possa fare qualcosa di simile?

myVector[i][j].getDisplayChar(); 

Snippet

m_vvTiles.resize(iHeight); 

for(auto it = m_vvTiles.begin(); it != m_vvTiles.end(); it++){ 

    (*it).resize(iWidth,Tile(' ')); 
} 
+0

'std :: vector <>' non è multidimensionale. Quale classe vettoriale stai usando? – cdhowie

+0

std :: vector > m_vvTiles; Funziona così con il tipo di carattere – Habit

risposta

15

Dovete ridimensionare i vettori esterne ed interne a parte.

myVector.resize(n); 
for (int i = 0; i < n; ++i) 
    myVector[i].resize(m); 
+0

Ok così n è larghezza e m è altezza? E poi potrei fare un doppio per il loop e spingere gli oggetti nel vettore? – Habit

+0

@Justin Non volevo dare per scontato quale fosse la larghezza e l'altezza dal momento che dipende interamente da te e dalle supposizioni fatte nel tuo programma. Se preferisci spingere piuttosto che ridimensionare va bene, ma devi assicurarti di spingere il giusto numero di elementi - sarà più grande su quelli nuovi esterni. –

+0

Ah ok. Quindi, invece di spingere oggetti Tile, potrei riempirlo quando faccio il ridimensionamento? – Habit

3

Possiamo anche utilizzare il codice linea singola:

matrix.resize(row_count , vector<int>(column_count , initialization_value)); 

Se il codice viene ripetutamente cambiando le dimensioni e la matrice è talvolta restringendo anche allora prima ridimensionamento chiaro il vecchio stato della matrice (vettore 2D)

matrix.clear(); 
matrix.resize(row_count , vector<int>(column_count , initialization_value)); 

// we can create a 2D integer vector with 3 rows and 5 columns having "-1" as initial value by: 
matrix.clear(); 
matrix.resize(3, vector<int> (5,-1)); 
2

Non è necessario un ciclo per ridimensionare un vettore bidimensionale (matrice). Si può semplicemente fare la chiamata segue una linea di ridimensionamento():

//vector<vector<int>> M; 
//int n = number of rows, m = number of columns; 
M.resize(n, vector<int>(m)); 

Speranza che aiuta!

Problemi correlati