Tôi có một ma trận số nguyên nên hành động như một bộ đệm:C: cách thông minh để "dịch chuyển" ma trận?
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
Bây giờ nếu tôi thêm một hàng mới {3, 3, 3, 3, 3}
, ma trận mới sẽ giống như thế:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
Có một cách thông minh để làm điều này mà không cần sao chép tất cả các yếu tố xung quanh?
Nhiều câu trả lời dưới đây là chính xác về mặt kỹ thuật, nhưng tất cả đều liên quan đến sự cân bằng khác nhau. Bạn có thể mở rộng sử dụng dự kiến của mình một chút không? Các ma trận này sẽ lớn đến cỡ nào? Làm thế nào thường mong đợi để thêm một hàng, so với số lần bạn sẽ truy cập dữ liệu từ các ma trận? Bạn sẽ truy cập các phần tử riêng lẻ của ma trận, hay nó sẽ chỉ được đọc như một thực thể toàn bộ từ đầu đến cuối? Bạn có muốn để có thể giải phóng các phần của ma trận theo thời gian? Nếu vậy, chỉ từ cuối, hoặc từ đầu, hoặc từ một hàng tùy ý? –
Ma trận không lớn (như 100 phần tử trong tổng số).Tôi sẽ luôn luôn truy cập toàn bộ ma trận, hàng "cũ" có thể biến mất (hành vi nămo-hàng đợi), các cập nhật diễn ra rất thường xuyên. –
Trong trường hợp đó, phương pháp modulo được đề xuất bởi @ruslik có lẽ là cược tốt nhất của bạn. Chỉ cần cấp phát một mảng có thể xử lý kích thước tối đa, duy trì một con trỏ đến đầu hiện tại và quấn quanh đầu của mảng khi bạn hết phòng. –