2013-04-08 22 views
7

Lớp học của tôi, GameBoard, có biến thành viên là vector 2D của đối tượng thuộc lớp Tile. Hàm tạo GameBoard có chiều rộng và chiều cao làm tham số.Làm thế nào tôi có thể thay đổi kích cỡ một vector 2D của các đối tượng cho chiều rộng và chiều cao?

Làm cách nào để có được vector 2D của các đối tượng Tile để thay đổi kích thước theo chiều rộng và chiều cao được truyền cho hàm tạo? Làm thế nào tôi có thể điền nó với Tile đối tượng để tôi có thể làm một cái gì đó như thế này?

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 <>' không phải là đa chiều. Bạn đang sử dụng lớp vectơ nào? – cdhowie

+0

std :: vector > m_vvTiles; Nó hoạt động như thế với kiểu char – Habit

Trả lời

15

Bạn cần phải thay đổi kích thước các vectơ bên ngoài và bên riêng biệt.

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

Ok vậy n là chiều rộng và m là chiều cao? Và sau đó tôi có thể chỉ làm một đôi cho vòng lặp và đẩy các đối tượng vào vector? – Habit

+0

@Justin Tôi không muốn giả sử chiều rộng nào so với chiều cao vì điều đó hoàn toàn tùy thuộc vào bạn và các giả định bạn đã thực hiện trong chương trình của mình. Nếu bạn muốn đẩy hơn thay đổi kích thước đó là tốt, nhưng bạn phải chắc chắn để đẩy đúng số lượng các yếu tố - nó sẽ lớn hơn trên những cái mới bên ngoài. –

+0

Ah ok. Vì vậy, thay vì đẩy các đối tượng Tile, tôi có thể điền vào nó khi thực hiện thay đổi kích thước? – Habit

3

Chúng tôi cũng có thể sử dụng mã dòng duy nhất:

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

Nếu mã được lặp đi lặp lại việc thay đổi kích thước và ma trận đôi khi được thu hẹp còn sau đó trước khi tái định cỡ rõ ràng trạng thái cũ của ma trận (2D vector)

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

Bạn không cần vòng lặp để thay đổi kích thước véc tơ 2 chiều (ma trận). Bạn chỉ cần thực hiện một trong các thay đổi kích thước một dòng sau() gọi:

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

Hy vọng điều đó sẽ hữu ích!

Các vấn đề liên quan