Tôi có một mảng chứa lịch sử giá trị, và khi thêm một giá trị mới, tôi cần phải chuyển tất cả các giá trị trước đó sang một vị trí sang trái, để mất giá trị cũ nhất và nhường chỗ cho giá trị tiếp theo.Cách tốt nhất để thay đổi một mảng trong C là gì?
tôi có thể nghĩ đến hai cách để làm điều này, bằng cách sử dụng memmove:
memmove(&arr[0], &arr[1], sizeof(arr) - sizeof(*arr));
Hoặc bằng cách trao đổi các con trỏ:
for (i = 0; i != sizeof(arr) - 1; i++) {
*(arr + i) = *(arr + i + 1);
}
Có một sự khác biệt hiệu suất giữa hai phương pháp, và nếu không, cái nào sẽ được thông báo?
Bạn đã cân nhắc không sử dụng mảng cho điều này hay không phải là một tùy chọn? – nic
@nic Tôi cần phải theo dõi các giá trị X cuối cùng, vì vậy tôi không thể nghĩ ra bất kỳ cách hợp lý hơn để lưu trữ chúng ngoại trừ một mảng. – Muis
Sử dụng hàng đợi (bạn vẫn có thể sử dụng một mảng để triển khai nó) và tránh sao chép bộ nhớ. http://www.thelearningpoint.net/computer-science/data-structures-queues--with-c-program-source-code –