Chuyển tới nội dung chính

std::deque::shrink_to_fit

#include <deque>

void shrink_to_fit();

Gửi một yêu cầu (không phải là bắt buộc) đến deque giảm thiểu việc sử dụng bộ nhớ, sao cho phù hợp với kích thước hiện tại (số lượng phần tử).

Tham số

Không có tham số

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. shrink_to_fit() thường được gọi sau khi bạn đã xóa một lượng lớn phần tử khỏi deque và muốn giải phóng bộ nhớ không còn sử dụng.
  2. shrink_to_fit() chỉ là một yêu cầu, không phải là một lệnh bắt buộc. Việc deque có thực sự giảm dung lượng bộ nhớ hay không phụ thuộc vào trình triển khai (implementation) của thư viện chuẩn.
  3. shrink_to_fit() không làm thay đổi số lượng phần tử (kích thước) hoặc giá trị của các phần tử trong deque. Nó chỉ cố gắng tối ưu hóa việc sử dụng bộ nhớ.
  4. shrink_to_fit() không ném ra bất kỳ ngoại lệ nào (trừ khi việc cấp phát bộ nhớ thất bại, nhưng trường hợp này rất hiếm và không được coi là ngoại lệ của shrink_to_fit()).
  5. Hành vi của shrink_to_fit() có thể khác nhau giữa các trình biên dịch và thư viện chuẩn khác nhau.
  6. Đối với std::vector, shrink_to_fit() có thể làm thay đổi capacity(), nhưng std::deque không có khái niệm capacity().
  7. Không có cách trực tiếp để kiểm tra xem shrink_to_fit() có thực sự giải phóng bộ nhớ hay không trong deque, vì deque không cung cấp hàm capacity().
  8. Độ phức tạp: Độ phức tạp của shrink_to_fit() không được quy định cụ thể trong tiêu chuẩn, nhưng thường phụ thuộc vào cách thức cấp phát bộ nhớ của trình triển khai.

Ví dụ

#include <iostream>
#include <deque>

int main() {
std::deque<int> myDeque;
for (int i = 0; i < 1000; ++i) {
myDeque.push_back(i);
}

std::cout << "Size: " << myDeque.size() << '\n';

myDeque.erase(myDeque.begin(), myDeque.begin() + 900); // Xóa 900 phần tử

std::cout << "Size after erasing: " << myDeque.size() << '\n';

myDeque.shrink_to_fit(); // Yêu cầu deque thu gọn bộ nhớ

// Không có cách trực tiếp để kiểm tra dung lượng bộ nhớ của deque
// nhưng sau khi gọi shrink_to_fit(), deque có thể (không bắt buộc)
// đã giải phóng bộ nhớ không sử dụng.

return 0;
}

Các hàm liên quan

sizeLấy số lượng phần tử hiện có trong deque
resizeThay đổi kích thước của deque
clearXóa tất cả các phần tử khỏi deque, làm cho deque trở thành rỗng