2011-06-27 66 views
9

Tôi đã sau std::vector khai:đa chiều vector khởi tạo

std::vector<std::vector<std::vector<int> > > m_input;

Tôi khởi tạo nó như sau:

m_input.resize (100); 
    m_output.resize(100); 
    for (int i = 0; i < 100; ++i) { 
     m_input [i].resize(100); 
     m_output[i].resize(100); 
     for (int j = 0; j < 100; ++j){ 
      m_input [i][j].resize(100); 
      m_output[i][j].resize(100); 
     } 
    } 

Làm thế nào tôi có thể đạt được điều này thông qua thành viên danh sách initializer?

+5

Nếu hàng của bạn \ cols \ v.v ... bằng id chiều dài, bạn nên sử dụng vectơ là 'std :: vector m_input'; và khởi tạo nó như 'm_input (100 * 100 * 100);', sau đó truy cập các phần tử như 'm_input [x + y * 100 + z * 100 * 100]; ' –

+0

@Viktor: cảm ơn. – Avinash

Trả lời

17

std::vector<T> có một hàm tạo lấy hai đối số, một số phần tử và giá trị ban đầu. Trong trường hợp của bạn, bạn muốn khởi tạo m_input với 100 bản sao của std::vector<std::vector<int> >, do đó, nó sẽ là : m_input(100, X). Bây giờ, đó X lần lượt là một vector của 100 std::vector<int>, mà lần lượt chứa một trăm ints:

: m_input(100, std::vector<std::vector<int> >(100, std::vector<int>(100, 0)))

6
my_class::my_class() 
: m_input(100, std::vector< std::vector<int> >(100, std::vector<int>(100))) 
{ 
} 

Điều đó nói rằng, việc triển khai trường đa chiều nên được thực hiện bằng cách chiếu vào một chiều một chiều, như Viktor đã nói trong nhận xét của mình cho câu hỏi.

+1

Tôi yêu nhà xây dựng này của vector :) –

+2

Điều đó phải là 'std :: vector ', chắc chắn? – Puppy

+0

sbi: 'std :: string name =" Viktor "; khẳng định (tên [2] == 'k'); ' –

0

Nếu bạn có thể khẳng định rằng kích thước vector của bạn sẽ được một chiều dài cố định, thì tại sao không sử dụng std::array?

Ví dụ:

std:array<std::array<std::array<int, 100>, 100>, 100>

Bằng cách đó bạn có thể tận dụng lợi thế của tất cả các bộ nhớ đang được liên tục kế nhau được phân bổ (như ám chỉ bởi Viktor_Sehr trong các ý kiến), mà không những tai ương thực hiện thêm các truy cập vào một 1- mảng chiều theo phương pháp 3 chiều.

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