Tôi có một multi_array 3D và tôi muốn tạo các lát 2D bằng cách sử dụng các kích thước được chỉ định trong thời gian chạy. Tôi biết chỉ số của thứ nguyên thoái hóa và chỉ mục của một lát mà tôi muốn trích xuất trong thứ nguyên thoái hóa đó. Hiện tại, giải pháp xấu xí trông giống như vậy:Làm thế nào để xác định kích thước thoái hóa của boost multi_array khi chạy?
if (0 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[slice_index][range()][range()]];
}
else if (1 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][slice_index][range()]];
}
else if (2 == degenerate_dimension)
{
Slice slice = input_array[boost::indices[range()][range()][slice_index]];
}
Có cách nào đẹp hơn để xây dựng đối tượng index_gen không? Something như thế:
var slicer;
for(int i = 0; i < 3; ++i) {
if (degenerate_dimension == i)
slicer = boost::indices[slice_index];
else
slicer = boost::indices[range()];
}
Slice slice = input_array[slicer];
Dường như mỗi cuộc gọi tiếp theo để thúc đẩy :: chỉ số :: operator [] trả về một kiểu khác nhau tùy thuộc vào chiều (tức là số lượng cuộc gọi trước đó), vì vậy không có cách nào để sử dụng một biến duy nhất, có thể giữ đối tượng index_gen tạm thời.
+1 cho câu hỏi rõ ràng bằng cách sử dụng mảng đa chiều sane chứ không phải nội dung C! :) – Xeo