Bạn không cần chính xác shrink_to_fit
cho hàng đợi, nếu nó được sử dụng bình thường. 's shrink_to_fit
là có nghĩa là cho các tình huống mà nội dung vector đã giảm đi một lượng lớn, do đó nó thực sự có một lợi ích để gọi sự tái phân bổ (khá tốn kém) để giải phóng lượng bộ nhớ khổng lồ đó. Nói chung không cần thiết nếu véc tơ có tuổi thọ ngắn hoặc nếu kích thước của nó không thay đổi quá nhiều.
Có nói rằng, std::deque
là một loại thú khác. Nó thường là bao gồm các khối bộ nhớ có kích thước cố định. Nếu bạn xóa nhiều phần tử từ deque, các khối không còn chứa bất kỳ phần tử nào có thể/sẽ được deallocated. Vì vậy, chi phí bộ nhớ lớn nhất bạn có thể có bất cứ lúc nào là một chút dưới hai lần kích thước chunk, ví dụ nếu hàng đợi chỉ chứa hai phần tử, một phần tử ở cuối đoạn, phần thứ hai ở đầu đoạn tiếp theo. Do đó, std::deque::shrink_to_fit
chỉ có thể di chuyển các phần tử của deque theo cách giải phóng chính xác một đoạn, mà không phải là một lợi ích lớn (iirc một thực hiện điển hình có kích thước chunk của một vài kb).
Đây là những tuyên bố rất chung chung có thể không áp dụng trong các tình huống quan trọng của bộ nhớ. Nhưng như tiêu chuẩn vùng chứa, không phải véc tơ không deque được thiết kế rõ ràng để được sử dụng trong các tình huống exetreme như vậy. Nếu dấu vết bộ nhớ là một vấn đề trong một phần của chương trình mà bạn sử dụng hàng đợi, bạn có thể muốn sử dụng một cấu trúc dữ liệu khác.
Nguồn
2013-08-26 09:26:50
'std :: vector' không phải giải phóng bộ nhớ trong cuộc gọi đến' shrink_to_fit'. – juanchopanza
@juanchopanza Sau đó, mục đích của phương thức 'shrink_to_fit' là gì? – Sungmin
@Sungmin: Mục đích là nó là một gợi ý cho việc thực hiện. – ronag