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

std::string::shrink_to_fit

#include <string>

void shrink_to_fit(); // (since C++11)

Yêu cầu (không bắt buộc) để giảm dung lượng (capacity) của chuỗi cho khớp với kích thước (size) hiện tại của nó. Nói cách khác, nó cố gắng giải phóng phần bộ nhớ thừa không được sử dụng bởi chuỗi.

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() chỉ là một yêu cầu, không phải là một mệnh lệnh bắt buộc. Implementation có thể bỏ qua yêu cầu này.
  2. shrink_to_fit() không thay đổi nội dung hoặc kích thước (size()) của chuỗi. Nó chỉ ảnh hưởng đến dung lượng (capacity()).
  3. Gọi shrink_to_fit() có thể tốn kém về mặt hiệu năng vì nó có thể liên quan đến việc cấp phát lại bộ nhớ và sao chép các phần tử.
  4. Sau khi gọi shrink_to_fit(), bạn không nên dựa vào giá trị của capacity(), vì nó có thể thay đổi hoặc không.
  5. shrink_to_fit() có thể làm vô hiệu hóa tất cả các iterator, con trỏ và tham chiếu đến các phần tử của chuỗi.
  6. shrink_to_fit() không đảm bảo rằng capacity() sẽ thay đổi. Việc thu nhỏ dung lượng là tùy thuộc vào implementation của thư viện chuẩn. Trong một số trường hợp, capacity() có thể không thay đổi sau khi gọi shrink_to_fit().
  7. shrink_to_fit() có thể làm vô hiệu hóa (invalidate) tất cả các iterator, con trỏ và tham chiếu đến các phần tử của chuỗi, ngay cả khi nó không thay đổi capacity.
  8. Hàm shrink_to_fit() được chỉ định là noexcept, nghĩa là nó được đảm bảo không ném ra ngoại lệ.
  9. shrink_to_fit() thường được sử dụng khi:
    • Bạn muốn giải phóng bộ nhớ không sử dụng sau khi đã xóa hoặc thay đổi kích thước chuỗi đáng kể.
    • Bạn muốn giảm thiểu dung lượng bộ nhớ mà chuỗi đang sử dụng, đặc biệt khi làm việc với các chuỗi lớn.
    • Sau khi chắc chắn rằng, chuỗi sẽ không cần phải tăng kích thước nữa.

Ví dụ

#include <iostream>
#include <string>

int main() {
std::string str;
str.reserve(100); // Yêu cầu capacity ít nhất là 100

std::cout << "Initial capacity: " << str.capacity() << std::endl;

str = "Hello";

std::cout << "Size after assignment: " << str.size() << std::endl;
std::cout << "Capacity after assignment: " << str.capacity() << std::endl;

str.shrink_to_fit(); // Yêu cầu thu nhỏ capacity

std::cout << "Capacity after shrink_to_fit: " << str.capacity() << std::endl;

return 0;
}

Các hàm liên quan

capacityTrả về dung lượng bộ nhớ hiện tại được cấp phát cho chuỗi
reserveYêu cầu thay đổi dung lượng (capacity) của chuỗi, sao cho nó có thể chứa ít nhất một số lượng ký tự được chỉ định mà không cần phải cấp phát lại.
resizeTrả về số lượng ký tự tối đa mà một đối tượng std::string có thể chứa
clearXóa tất cả các ký tự khỏi chuỗi, làm cho chuỗi trở thành rỗng