2013-04-08 13 views
7

Sınıfım, GameBoard, Tile sınıfının bir nesnesinin 2B vektörü olan bir üye değişkenine sahiptir. GameBoard yapıcısı, genişlik ve yüksekliği parametreler olarak alır.Genişlik ve yükseklik verilen bir 2B vektör nesnesini nasıl yeniden boyutlandırabilirim?

Oluşturucuya iletilen genişlik ve yüksekliğe göre yeniden boyutlandırmak için Tile nesnelerinin 2B vektörünü nasıl alabilirim? Tile nesneleriyle nasıl doldurabilirim ki böyle bir şey yapabilirim?

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

Pasaj

m_vvTiles.resize(iHeight); 

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

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

'std :: vektör <>' çok boyutlu değil. Hangi vektör sınıfını kullanıyorsunuz? – cdhowie

+0

std :: vektör > m_vvTiles; – Habit

cevap

15

ayrı ayrı dış ve iç vektörleri yeniden boyutlandırmak gerekir. Kod sürekli boyutları değişen ve matris bazen matris eski durumunu açıkça yeniden boyutlandırma (2D vektörü) önce, sonra da daralma ise

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

:

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

char türünde olduğu gibi çalışır, böylece n genişlik ve m yüksekliktir? Ve sonra sadece bir döngü için iki kere yapabilirim ve nesnelere vektörü sokabilir miyim? – Habit

+0

@Justin Ben tamamen size ve hangi programda yaptığınız varsayımlar kadar genişlik vs yükseklik olduğunu varsaymak istemedim. Yeniden boyutlandırmaktan daha iyi bir şey yapmayı tercih ederseniz, ancak doğru sayıda elemanı itmeyi ihmal etmelisiniz - yeni dış kısımlarda daha büyük olacaktır. –

+0

Ah tamam. Bu yüzden Çini nesneleri itmek yerine, yeniden boyutlandırırken bunu doldurabilir miyim? – Habit

3

Ayrıca tek bir çizgi kodu kullanabilir

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

2 boyutlu bir vektörü (matris) yeniden boyutlandırmak için bir döngüye gerek yoktur. Aşağıdaki tek satır yeniden boyutlandırma() çağrısı yapabilirsiniz:

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

Bu yardımcı olur umarım!

İlgili konular