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
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.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()
).- 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ử. - Sau khi gọi
shrink_to_fit()
, bạn không nên dựa vào giá trị củacapacity()
, vì nó có thể thay đổi hoặc không. 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.shrink_to_fit()
không đảm bảo rằngcapacity()
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ọishrink_to_fit()
.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.- 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ệ. 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
capacity | Trả về dung lượng bộ nhớ hiện tại được cấp phát cho chuỗi |
reserve | Yê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. |
resize | Trả về số lượng ký tự tối đa mà một đối tượng std::string có thể chứa |
clear | Xóa tất cả các ký tự khỏi chuỗi, làm cho chuỗi trở thành rỗng |