Trong dự án hiện tại của tôi, tôi đang xử lý một cơ sở dữ liệu đa chiều. Tệp cơ bản được lưu trữ tuần tự (nghĩa là một mảng lớn, không có vec-tơ vectơ). Các thuật toán sử dụng các datastructures cần phải biết kích thước của các kích thước cá nhân.Trình biến đổi đa chiều chung C++
Tôi tự hỏi liệu một lớp lặp đa chiều đã được xác định một nơi nào đó theo cách chung chung và nếu có bất kỳ tiêu chuẩn hay cách thức ưu tiên nào về cách giải quyết vấn đề này.
Hiện tại tôi chỉ đang sử dụng trình lặp vòng tuyến tính với một số phương thức bổ sung trả về kích thước của từng thứ nguyên và số lượng thứ nguyên có trong phần đầu tiên. Lý do tôi không thích nó là bởi vì tôi không thể sử dụng std :: khoảng cách một cách hợp lý ví dụ (tức là chỉ trả về khoảng cách của toàn bộ cấu trúc, nhưng không thể cho từng kích thước riêng biệt).
Đối với hầu hết các phần, tôi sẽ truy cập vào cơ sở hạ tầng theo kiểu tuyến tính (thứ nguyên đầu tiên bắt đầu hoàn thành -> thứ nguyên tiếp theo + ... vv), nhưng sẽ rất tốt khi biết khi một thứ nguyên "kết thúc". Tôi không biết làm thế nào để làm điều này chỉ với toán tử *(), toán tử +() và toán tử ==() trong cách tiếp cận như vậy.
Một vector của phương pháp tiếp cận vectơ bị phản đối vì tôi không muốn chia nhỏ tệp. Ngoài ra các thuật toán phải hoạt động trên cấu trúc với chiều khác nhau và do đó khó để khái quát (hoặc có thể có một cách?).
Tăng multi_array có cùng vấn đề (nhiều "cấp" của trình lặp).
Tôi hy vọng điều này không quá mơ hồ hoặc trừu tượng. Bất kỳ gợi ý nào về đúng hướng sẽ được đánh giá cao.
Tôi đang tìm kiếm giải pháp cho bản thân mình một lần nữa và xem xét lại tăng :: multi_array. Khi nó quay ra có thể tạo ra các quan điểm phụ trên dữ liệu với chúng, nhưng đồng thời cũng có một trình lặp trực tiếp ở cấp cao nhất và ngầm "làm phẳng" cấu trúc dữ liệu. Các phiên bản thực hiện của multi_array tuy nhiên không phù hợp với nhu cầu của tôi, do đó tôi có thể sẽ thực hiện một bản thân (xử lý bộ nhớ đệm của các tệp trong nền) tương thích với các multi_arrays khác.
Tôi sẽ cập nhật lại sau khi triển khai xong.
Dường như bạn phải tự thực hiện trình lặp lặp nhiều chiều. Chỉ cần không giới hạn mình với các toán tử: bạn có thể sử dụng các phương thức được đặt tên để truy vấn thông tin về vị trí hiện tại trong mỗi thứ nguyên. –
Câu hỏi này rất thú vị. Cách duy nhất tôi tìm thấy để cung cấp thông tin như vậy là có các phương pháp có thể suy ra chỉ số đa, ví dụ: '{x, y, z}' từ chỉ số flatten (và ngược lại). Tôi không thấy làm thế nào bạn có thể làm điều đó một cách "tiêu chuẩn" mà không cung cấp lớp tùy chỉnh của riêng bạn cho mục đích đó. – coincoin
Cảm ơn cả hai về câu trả lời nhanh. @SergeRogatch: Đó là những gì tôi cũng nghĩ, nhưng nó có vẻ như vậy "chống thành ngữ". – Lazarus535