2013-07-15 63 views
44

Vì vậy, tôi có như sau:Khởi tạo một std chiều hai :: vector

std::vector< std::vector <int> > fog; 

và tôi khởi tạo nó rất ngây thơ thích:

for(int i=0; i<A_NUMBER; i++) 
    { 
      std::vector <int> fogRow; 
      for(int j=0; j<OTHER_NUMBER; j++) 
      { 
       fogRow.push_back(0); 
      } 
      fog.push_back(fogRow); 
    } 

Và nó cảm thấy rất sai ... Liệu có cách nào khác để khởi tạo một vectơ như thế này?

+1

Tôi khuyên bạn nên triển khai vector 1d cho vectơ 2d nếu bạn không yêu cầu nhiều không gian hơn 'std :: vector :: max_size()'. [Ở đây] (http://stackoverflow.com/a/13937325/942596) – andre

Trả lời

93

Sử dụng các constructor std::vector::vector(count, value) chấp nhận một kích thước ban đầu và giá trị mặc định:

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value 

Nếu một giá trị khác không, nói 4 ví dụ, đã được yêu cầu để được mặc định thì:

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER, 4)); 

Tôi cũng nên đề cập đến khởi tạo đồng bộ được giới thiệu trong C++ 11, cho phép khởi tạo vector và các vùng chứa khác, sử dụng {}:

std::vector<std::vector<int> > fog { { 1, 1, 1 }, 
            { 2, 2, 2 } }; 
23

Không có phương pháp append trong std::vector, nhưng nếu bạn muốn thực hiện một vector chứa A_NUMBER vectơ của int, mỗi người trong số những người có chứa other_number số không, sau đó bạn có thể làm điều này:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER)); 
+0

về nối thêm: chỉ là lỗi đánh máy :) cảm ơn! – fritzone

+0

Nó phù hợp với chúng tôi, – mxi1

0

Tổng cú pháp, như được mô tả là:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE)) 

Ở đây, vectơ 'v' có thể được hiển thị dưới dạng mảng hai chiều, với 'A_NUMBER' hàng, với 'OTHER_NUMBER' của các cột có giá trị ban đầu được đặt thành 'DEFAULT_VALUE'.

Ngoài ra nó có thể được viết như thế này:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE) 
std::vector<std::vector<int> > v(A_NUMBER, line) 

giá trị nhập trong một vector 2-D tương tự như nhập giá trị trong một mảng 2-D:

for(int i = 0; i < A_NUMBER; i++) { 
    for(int j = 0; j < OTHER_NUMBER; j++) { 
     std::cin >> v[i][j] 
    } 
} 

ví dụ đã được đã nêu trong các câu trả lời khác ....!

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