2013-06-06 24 views
9

Tôi có vấn đề này lẻKhông thể tạo một vectơ các mảng kích thước cố định?

vector<unsigned int[3]> tris; 
    for (unsigned int i = 0; i < idx.size() - 2; i++) { 
     unsigned int push[] = {idx[i], idx[i+1], idx[i+2]}; 
     tris.push_back(push); //<- this is where it goes belly up 
    } 

Các mảnh đang phải làm sáng tỏ một danh sách chỉ số tam giác dải vào chỉ số tam giác nhưng sẽ không biên dịch theo VS10. Suy nghĩ?

+4

Sử dụng 'std :: mảng'. – chris

Trả lời

20

Không, trừ khi bạn quấn mảng thành struct hoặc sử dụng một cái gì đó như std::array.

Loại mảng kiểu C thường không thể sao chép hoặc gán được, làm cho nó không đủ điều kiện để phân phát dưới dạng phần tử vùng chứa chuẩn.

P.S. Cần lưu ý rằng mặc dù C++ 11 chuyển sang phương pháp phức tạp hơn (theo phương pháp) để xác định các yêu cầu đối với loại phần tử container, thay vì cách tiếp cận rộng hơn được sử dụng bởi C++ 03. Yêu cầu không đủ điều kiện nêu trên được dựa trên C++ 03. Tôi không sẵn sàng để nói rằng nó là như vậy vô điều kiện đúng cho C++ 11 là tốt ... Nhưng nó chắc chắn đúng ngay cả trong C++ 11 nếu bạn nhấn mạnh vào việc sử dụng push_back trong mã của bạn.

P.P.S. Trong C++ 11, người ta có thể lấy đi std::list các mảng kiểu C thường và sử dụng emplace để xây dựng các phần tử mới. Nhưng không phải với std::vector.

+1

Đây là câu trả lời hay hơn, vì nó chính xác chỉ ra * tại sao * ví dụ không hợp lệ, không chỉ là việc cần làm. –

11

Sử dụng std::vector<std::array<unsigned, 3>> để thay thế.

0

Nếu bạn đang sử dụng C++ 11, bạn có thể sử dụng bộ dữ liệu.

std::vector < std::tuple< unsigned int, unsigned int, unsigned int > > tris; 

https://stackoverflow.com/a/15734156/846686

Một giải pháp 'tao nhã' ít có thể là một cặp đôi

std::vector < std::pair< unsigned int, std::pair<unsigned int, unsigned int> > tris; 

nhưng nó có thể dẫn đến mã rất bối rối để đọc ...

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